Presentation is loading. Please wait.

Presentation is loading. Please wait.

Proc*C 기초 Style System 김도형.

Similar presentations


Presentation on theme: "Proc*C 기초 Style System 김도형."— Presentation transcript:

1 Proc*C 기초 Style System 김도형

2 강의목표 Pro*C/C++에 대한 개념을 이해 할수 있다 Embedded SQL을 사용할 수 있다
Cursor를 사용할 수 있다 Embedded PL/SQL을 사용할 수 있다 Procedure를 호출 할 수 있다 Error Handling을 할 수 있다 개인적으로 Pro*C/C++를 공부할수 있는 토대를 마련할 수 있다

3 강의에서 다루지 않는 내용 Dynamic Cursor Savepoint Large Object: LOB Collection
Pro*C++ Compile Option Multi Thread Host Array

4 Pro*C란 Oracle사에서 C/C++를 기반으로하여 내장SQL문을 사용할 수 있도록 개조된 언어
Pro*C로 작성된 Source Code는 Oracle Pro*C/C++ Precompiler에 의해 보통의 C/C++ Source Code로 해석 입력 : 내장 SQL을 포함하는 .pc 파일 출력 : 오라클 라이브러리를 호출하는 .c 혹은 .cpp 파일

5 Pro*C/C++ Precompiler에 대해
High Level Language Source에 내장 SQL문을 사용 가능하게 하는 Programming Tool

6 Oracle Pro*C/C++ Precompiler를 사용하는 이유
Application Program에 강력하고 유연한 SQL문의 사용이 가능 간편한 Interface에의한 Application으로 부터 Oracle에의 직접 Access가 가능 C/C++를 사용할수 있는 곳이라면 어떤 장르의 Program에도 적용 가능 제공되는 Runtime Indicator에 의해 Oracle의 세밀한 감시및 조정이 가능, 즉 Application의 성능 향상을 꾀할수 있음 Compile Option에 따라 내장 SQL의 의미 분석도 가능, 즉 SQL의 Syntax Error를 제거 할 수 있음

7 Window에서의 Pro*C의 설치(1/4)
Oracle Programmer Component를 설치하여야 Pro*C/C++를 사용할수 있음

8 Window에서의 Pro*C의 설치(2/4)
bin\proc.exe을 확인

9 Window에서의 Pro*C의 설치(3/4)
precomp\public\oraca.h, precomp\public\sqlca.h 을 확인

10 Window에서의 Pro*C의 설치(4/4)
precomp\lib\msvc\oraSQL9.LIB 을 확인

11 Visual C++의 환경 설정 (1/11) Project 생성 Project Name에 proctest(프로젝트명)를 입력

12 Visual C++의 환경 설정 (2/11) 새로운 Source File을 추가
추가 File 종류를 C Source로 proctest.pc를 추가

13 Visual C++의 환경 설정 (3/11) 추가 File 종류를 C Source로 proctest.c를 추가
Proctest.pc를 Compile 대상에서 제외 시킴

14 Visual C++의 환경 설정 (4/11) Build로 부터 제외:はい를 선택 Build에서 제외 된것을 확인

15 Visual C++의 환경 설정 (5/11) Project 환경설정
추가 INCLUDE DIRECTORY : C:\oracle\ora92\precomp\public : header file의 경로를 입력 DEBUG 정보 형식 : Editor Continue용 Program DB를 선택

16 Visual C++의 환경 설정 (6/11) 최적화 : 無効(/Od)를 선택
C:\oracle\ora92\precomp\lib\msvc : Library file의 경로를 입력

17 Visual C++의 환경 설정 (7/11) oraSQL9.LIB : Library file Name 입력
DEBUG 정보 생성 : はい(/ DEBUG)를 선택

18 Visual C++의 환경 설정 (8/11) Proc proctest.pc : proc 프로젝트명.pc 을 입력
Text Editor의 설정

19 Visual C++의 환경 설정 (9/11) C/C++ File Extension : “;*.pc”를 추가

20 Visual C++의 환경 설정 (10/11) Test Source Code의 입력 Proctest.pc

21 Visual C++의 환경 설정 (11/11) Project의 Rebuild Ctrl+Alt+F7 실행결과(Ctrl+F5)

22 내장 SQL : Host 변수 Host(Source) Program과 Oracle간의 Data의 통신에 사용됨
출력 호스트 변수 (Oracle -> Host Program) (예) SELECT에서 리턴된 데이타를 받기 위해 사용되는 변수 입력 호스트 변수 (Host Program -> Oracle) (예) INSERT에서 입력할 데이타를 받기 위해 사용되는 변수 내장 SQL에 사용될 때는 변수명 앞에 콜론을 붙여 사용 Ex) :host_variable DECLARE SECTION 절에 정의 Ex) EXEC SQL BEGIN DECLARE SECTION; int host_variable; EXEC SQL END DECLARE SECTION;

23 내장 SQL : Host 변수

24 내장 SQL : Host 변수 : VARCHAR 형
Precompiler에 의한 VARCHAR의 해석 VARCHAR username[20]; struct { unsigned short len; unsigned char arr[20]; } username;

25 내장 SQL : Host 변수 : INDICATOR 변수
출력 Host변수의 상태를 나타내거나, 입력 Host 변수의 값을 설정함 2 Bytes 정수로 정의됨 ex)short comm_ind; SQL 구문중 Host 변수 직후에 콜론과 함께 사용함 :host_variable INDICATOR :indicator_variable :host_variable:indicator_variable(INDICATOR Keyword 생략가능) 출력 Host 변수에서 INDICATOR변수를 추가하지 않았을경우 Compile Option에 따라서 Select 문의 결과가 NULL을 포함한 Record가 반환되면 Error가 발생됨 -> 반드시 사용할것을 권장 ORA-01405: フェッチした列の値がNULL です。

26 내장 SQL : Host 변수 : INDICATOR 변수
-1 : 해당 Column에 NULL이 설정됨. Host 변수의 값은 무시됨 >=0 : Host 변수의 값이 해당 Column에 설정됨 출력 Host변수에 사용시 -1 : NULL. Host변수 값 사용 불가(값 보장 못함) 0 : 정상. Host 변수 값 사용 가능 >0 : Host 변수 크기 부족으로 정확한 값이 셋팅되지 못함. INDICATOR 변수의 값은 원래의 크기를 나타냄. -2 : Host 변수 크기 부족으로 정확한 값이 셋팅되지 못함. 원래의 크기를 알수 없음.

27 내장 SQL : Host 변수 : 실습

28 내장 SQL : Host 변수 : 실습 실행결과

29 내장 SQL : DECLARE 문 Host 변수와 Cursor 변수를 선언 Host 변수의 선언
EXEC SQL BEGIN DECLARE SECTION; int host_variable; EXEC SQL END DECLARE SECTION; Cursor 변수의 선언 EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT ename, empno, sal FROM emp WHERE deptno = :dept_number;

30 내장 SQL : CURSOR 질의 결과가 복수의 Record인 경우, 한 Record씩의 처리가 가능하도록 함 -> 복수의 질의 결과에 CURSOR을 사용하지 않으면 Runtime Error가 발생함 CURSOR와 관련된 명령어들 DECLARE CURSOR OPEN FETCH CLOSE

31 내장 SQL : CURSOR : OPEN DECLARE CURSOR문의 정의된 커서의 질의를 실행하여 Result Set을 생성함 EX) EXEC SQL OPEN emp_cursor; OPEN가 실행되어도 Result Set을 사용할 수는 없음 OPEN에 의해 CURSOR는 Result Set의 처음 Record의 바로 앞을 가리킴 한번 OPEN된 CURSOR는 다시 OPEN 하지 않는 이상 Result Set을 변경하지 않음 통상, CURSOR를 다시 OPEN 하기전에는 CLOSE할 필요가 있음

32 내장 SQL : CURSOR : FETCH Result Set으로 부터 하나의 Record를 추출하여, INTO구 이후에 정의되어 있는 출력 Host변수에 설정함 Ex) EXEC SQL FETCH emp_cursor INTO :emp_name, :emp_number, :salary; FETCH하기전에 OPEN되어 있어야 함 최초로 FETCH되면 최초 Record의 바로 앞에 있던 CURSOR가 첫번째 Record로 이동(현재 행이라 불리움) 보통의 커서는 이전 Record로 되돌아 갈수 없음. 이전 Record로 되돌아 가기 위해서는 CURSOR를 CLOSE하고 재 OPEN 하여야 함 Result Set이 비었거나, 더이상 남아있는 Record가 없는 경우, 「データが見つかりません」Error가 발생 (출력 Host변수의 내용은 보장불가) -> 보통 WHENEVER NOT FOUND절로 검출하여 Program의 흐름을 제어 다음 경우, FETCH는 Error가 됨 CURSOR를 OPEN하기 전 「データが見つかりません」인 경우 CURSOR를 CLOSE한 후

33 내장 SQL : CURSOR : CLOSE FETCH가 끝난 CURSOR의 Resource(Memory 등)를 System에 반환함 Ex) EXEC SQL CLOSE emp_cursor; CLOSE후의 CURSOR로 부터의 FETCH는 허용되지 않음 필요에 의해 CURSOR의 재 사용이 가능함->입력 Host 변수에 값 할당후 재 OPEN등.

34 내장 SQL : CURSOR : 실습

35 내장 SQL : CURSOR : 실습 실행결과

36 내장 SQL : SELECT Data Base에 질의를 수행 Oracle은 INTO절의 출력 Host변수에 값을 설정함
Ex) EXEC SQL SELECT ename, job, sal INTO :emp_name, :job_title, :salary FROM emp WHERE empno = :emp_number; Oracle은 INTO절의 출력 Host변수에 값을 설정함 추출 Column수와 INTO절의 출력 Host변수의 갯수는 일치 하여야함 질의가 복수의 Record를 반환하는 경우에는 반드시 CURSOR를 사용

37 내장 SQL : INSERT Table또는 View에 하나의 Record를 추가
Ex) EXEC SQL INSERT INTO emp (empno, ename, sal, deptno) VALUES (:emp_number, :emp_name, :salary, :dept_number); VALUES절에는정수, Host 변수, SQL식, SQL함수(USER、SYSDATE 등), 또는 사용자 정의 PL/SQL 함수 등이 올수 있음 VALUES절의 요소의 갯수와 INTO절의 Column의 갯수는 일치 하여야함 Table에 정의 되어 있는 순서대로, VALUES절의 값들이 하나도 빠짐없이 존재하는 경우에는 INTO절의 Column List를 생략할 수 있음

38 내장 SQL : UPDATE, DELETE UPDATE DELETE Table또는 View의 값을 변경
Ex) EXEC SQL UPDATE emp SET sal = :salary, comm = :commission WHERE empno = :emp_number; DELETE Table또는 View로 부터 Record를 삭제 Ex) EXEC SQL DELETE FROM emp WHERE deptno = :dept_number ;

39 내장 SQL : INSERT : 실습

40 내장 SQL : INSERT : 실습

41 내장 SQL : INSERT : 실습 실행결과

42 내장 SQL : UPDATE : 실습

43 내장 SQL : UPDATE : 실습

44 내장 SQL : UPDATE : 실습 실행결과

45 내장 SQL : DELETE : 실습

46 내장 SQL : DELETE : 실습

47 내장 SQL : DELETE : 실습 실행결과

48 내장 SQL : WHENEVER 보통, Precompile된 Program은 Oracle Error및 경고를 무시하고, 될수 있으면 처리를 계속함 자동으로 조건Check및 Error처리를 실행 하기 위해서 WHENEVER문을 사용 WHENEVER 사용예 Ex) EXEC SQL WHENEVER <condition> <action>; WHENEVER을 이용해서, Oracle Error, SQLERROR, SQLWARNING및 NOT FOUND가 발생했을때의 처리를 지정함<condition> 상기의 처리는 다음 명령문의 계속적인 실행, 처리 루틴의 호출, goto, Prorgam의 종료등이 있음<action>

49 내장 SQL : WHENEVER : <condition>
SQLWARNING : 경고 메시지가 발생한 경우 SQLERROR : 에러가 발생한 경우 NOT FOUND WHERE : 절의 조건을 만족하는 행을 발견할 수 없거나, SELECT INTO나 FETCH가 어떤 행도 반환하지 않은 경우

50 내장 SQL : WHENEVER : <action>
CONTINUE : 가능하면 Program은 다음 문장을 수행함. 디폴트 동작으로 WHENEVER를 쓰지 않은 경우와 같음. WHENEVER문의 영향을 종료시키기 위해 사용. DO : Error 처리 함수를 수행. Error 처리 함수 수행 후 실패한 SQL문의 다음 문장으로 제어가 넘어감. DO BREAK : 실제적인 “break”문. Loop에서 사용. <condition>이 성립하면 Loop를 빠짐. DO CONTINUE : 실제적인 “continue”문. Loop에서 사용. <condition>이 성립하면 다음 Loop를 반복 GOTO label_name : label_name로 제어 이동. 실제적인 “goto” 문. label_name의 길이 제한은 없으나 31번째까지만 의미가 있음. STOP : 프로그램 수행을 종료하고, 트랜잭션은 롤백됨.

51 내장 SQL : WHENEVER : Scope
WHENEVER문은 선언문이므로, 위치에 영향을 받음. 즉, WHENEVER문은 Program의 최초의 SQL문 보다 먼저 선언 되어야 함. 한번 선언된 WHENEVER문은 같은 <condition>으로 새로운 WHENEVER문이 선언되기 전까지 유효함. Ex) step1: EXEC SQL WHENEVER SQLERROR STOP; EXEC SQL CONNECT :username IDENTIFIED BY :password; ... goto step3; step2: EXEC SQL WHENEVER SQLERROR CONTINUE; EXEC SQL UPDATE emp SET sal = sal * 1.10; step3: EXEC SQL DROP INDEX emp_index;

52 내장 SQL : WHENEVER : DO ... EXEC SQL WHENEVER SQLERROR DO handle_insert_error("INSERT error"); EXEC SQL INSERT INTO emp (empno, ename, deptno) VALUES (:emp_number, :emp_name, :dept_number); EXEC SQL WHENEVER SQLERROR DO handle_delete_error("DELETE error"); EXEC SQL DELETE FROM dept WHERE deptno = :dept_number; handle_insert_error(char *stmt) { switch(sqlca.sqlcode) { case -1: /* duplicate key value */ break; case -1401: /* value too large */ default: /* do something here too */ ... break; } handle_delete_error(char *stmt) { printf("%s¥n¥n", stmt); if (sqlca.sqlerrd[2] == 0) /* no rows deleted */ else { ...

53 내장 SQL : WHENEVER : DO BREAK / DO CONTINUE
#include <sqlca.h> #include <stdio.h> main() { char *uid = "scott/tiger"; struct { char ename[12]; float sal; float comm; } emp; EXEC SQL WHENEVER SQLERROR GOTO whoops; EXEC SQL CONNECT :uid; EXEC SQL DECLARE c CURSOR FOR SELECT ename, sal, comm FROM EMP ORDER BY ENAME ASC; EXEC SQL OPEN c; EXEC SQL WHENEVER NOT FOUND DO BREAK; EXEC SQL WHENEVER SQLERROR DO CONTINUE; while (1) { EXEC SQL FETCH c INTO :emp; printf("%s %7.2f %9.2f¥n", emp.ename, emp.sal, emp.comm); } EXEC SQL WHENEVER SQLERROR CONTINUE; EXEC SQL CLOSE c; exit(EXIT_SUCCESS); whoops: printf("%.*s¥n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc); exit(EXIT_FAILURE);

54 내장 SQL : WHENEVER : 실습

55 내장 SQL : WHENEVER : 실습

56 내장 SQL : WHENEVER : 실습 실행결과(2번 실행시킨 경우)

57 내장 SQL : SQLCA SQLCA은 구조체 SQLCA의 멤버변수들은, SQL문이 실행될때마다 Oracle에 의해 갱신됨.
항상 가장 최근에 실행된 SQL의 실행결과의 Error, 경고, 상태 정보등을 보유 SQLCA를 사용하기 위해서는 아래의 정의를 기술해야함 EXEC SQL INCLUDE SQLCA; 또는 #include <sqlca.h>

58 내장 SQL : SQLCA struct sqlca { char sqlcaid[8]; /* "SQLCA" 문자 스트링 */ long sqlabc; /* slqca구조체의 길이 */ long sqlcode; /* 에러코드 */ struct unsigned short sqlerrml; /* 에러 메시지 길이 */ char sqlerrmc[70]; /* 에러 메시지 내용 */ } sqlerrm; char sqlerrp[8]; /* reserved */ long sqlerrd[6]; /* sqlerrp[0] : reserved sqlerrp[1] : reserved sqlerrd[2] : 수행된 행의 개수

59 내장 SQL : SQLCA sqlerrd[3] : reserver sqlerrd[4] : 파싱 에러 옵셋 sqlerrd[5] : reserved */ char sqlwarn[8]; /* sqlwarn[0] : 경고 플래그 sqlwarn[1] : 문자스트링이 절단된 경우 sqlwarn[2] : 안쓰임. sqlwarn[3] : SELECT문에서 필드 개수와 INTO문의 호스트 변수 개수가일치하지 않음 sqlwarn[4] : DELETE 또는 UPDATE문에서where절이 없음. sqlwarn[5] : reserved sqlwarn[6] : 안쓰임. sqlwarn[7] : 안쓰임. */ char sqlext[8]; /* reserved */ };

60 내장 SQL : SQLCA sqlcode : 최후에 실행된 SQL문의 상태코드가 저장됨. 값의 의미 0 : 성공
>0 : SQL은 실행되었지만, 열외가 발생한 경우. WHERE절에 만족하는 행이 없는 경우, 또는 SELECT INTO 또는 FETCH문에서 반환된 행이 없는 경우 <0 : Database, System, Network 또는 Application의 Error가 원인으로 SQL이 실행되지 못함. 치명적 Error. 대부분의 경우 Transaction은 Rollback됨.

61 내장 SQL : SQLCA Sqlerrm : 직전에 실행된 SQL이 Error인 경우 Error Message 가 저장됨
필드의 의미 sqlerrml : sqlerrmc에 저장되어 있는 문자열의 길이 sqlerrmc : sqlcode내에 저장되어 있는 Error Code에 대한 Text Message 가 저장됨. 문자열은 NULL로 종료하지 않으므로 sqlerrml에서 길이를 확인할 필요가 있음 Ex) sqlca.sqlerrm.sqlerrmc[sqlca.sqlerrm.sqlerrml]='₩0'; printf("%s", sqlca.sqlerrm.sqlerrmc);

62 내장 SQL : SQLCA : 실습

63 내장 SQL : SQLCA : 실습 실행결과(2번 실행시킨 경우)

64 내장 SQL : CONNECT Data를 질의하거나 조작하기전에 Pro*C/C++ Program을 Database에 접속시켜야함 Database에 Login하기위해 CONNECT을 사용함 Ex) EXEC SQL CONNECT :username IDENTIFIED BY :password ; EXEC SQL CONNECT :usr_pwd username 및password는 문자형 Host 변수임 Host 변수 usr_pwd는 /(slash)로 구분된 Username, Password를 포함

65 내장 SQL : CONNECT 원격에서 오라클 서버를 접속하려면, 먼저 tnsname.ora 파일을 편집
tnsname.ora 는 C:\oracle\ora92\network\ADMIN에 위치함.(Version에 따라 차이가 있음) Ex) BATCH_UT = ( DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = VPMS)) )

66 내장 SQL : CONNECT EX) char username[10] = "scott";
char password[10] = "tiger"; char db_string[20] = “BATCH_UT"; EXEC SQL CONNECT :username IDENTIFIED BY :password USING :db_string;

67 내장 SQL : CONNECT

68 내장 SQL : COMMIT Program에서 COMMIT 또는 ROLLBACK을 사용하지 않으면, Program은 전체가 하나의 Transaction임(단, Program에서 DDL을 사용하면 Auto COMMIT됨 ) COMMIT을 사용해서 Database의 변경을 확정 반영 COMMIT하기 전에 다른 User는 변경된 Data에 접근할 수 없고, 변경 전 상태의 Data만 열람할수 있음 COMMIT되면 수행되는 작업들 현재의 Transaction에서 변경된 사항을 Database에 반영 변경 사항을 다른 User가 열람할수 있게 함 모든 SAVEPOINT를 삭제함 모든 Record및 Table의 lock을 해제함 모든 Cursor를 해제함 Transaction을 종료함

69 내장 SQL : COMMIT COMMIT문은 Host 변수및 Program의 흐름에 영향을 주지 않음
Program을 종료하기 전에 COMMIT할 필요가 있음. 그렇지 않으면 변경되었던 Data는 Rollback됨 다음 예제는 Transaction을 COMMIT하고, Database의 연결을 해제함 Ex) EXEC SQL COMMIT WORK RELEASE; RELEASE Keyword를 사용하므로써, Program에서 사용했던 Oracle Resource(Lock, Cursor등)를 전부 해제하고, Database와의 연결을 종료함. DDL문은 실행되기 전과 후에 Auto COMMIT 되므로, DDL문 다음에 COMMIT을 기술할 필요는 없음. 따라서, DDL문의 실행이 성공하거나 실패하거나 결과에 관계없이 그전까지 Transaction은 COMMIT됨에 주의

70 내장 SQL : COMMIT

71 내장 SQL : ROLLBACK ROLLBACK문을 사용하면 Database에 대한 현재까지의 변경을 취소할수 있음
TO SAVEPOINT절을 사용하면 현재의 Transaction의 처음이 아닌 중간까지 되돌리는 것이 가능함 불완전한 Transaction을 원래대로 되돌리는 것이 가능하기 때문에 Database의 정합성을 확보할수 있음 ROLLBACK되면 수행되는 작업들 현재 Transaction내에서 Database에 대해 발생했던 변경이 전부 취소됨 모든 SAVEPOINT가 삭제됨 현재 Transaction이 종료됨 모든 Record및 Table의 Lock이 해제됨 모든 Cursor를 해제함

72 내장 SQL : ROLLBACK ROLLBACK 문은 Host 변수및 Program의 흐름에 영향을 주지 않음
ROLLBACK TO SAVEPOINT문이 수행되면 일어나는 작업들 지정된 SAVEPOINT이후의 Database의 변경은 전부 취소됨 지정된 SAVEPOINT이후의 모든 SAVEPOINT는 삭제됨 지정된 SAVEPOINT이후에 일어난 모든 Record Lock, Table Lock은 해제됨 다음 예제는 Transaction을 Rollback하고 Oracle과의 연결을 해제함 Ex) EXEC SQL ROLLBACK WORK RELEASE; RELEASE Keyword를 사용하므로써, Program에서 사용했던 Oracle Resource(Lock, Cursor등)를 전부 해제하고, Database와의 연결을 종료함. WHENEVER SQLERROR GOTO문으로 Error처리 Routine으로 분기한경우, 그 Routine의 ROLLBACK문에서 Error가 발생하면 무한Loop에 빠질 우려가 있음. 무한 Loop를 방지하기 위해 ROLLBACK문 전에 WHENEVER SQLERROR CONTINUE를 기술 해야 함

73 내장 SQL : ROLLBACK

74 내장 PL/SQL : PL/SQL BLOCK
Pro*C/C++에서는 PL/SQL Block도 사용 가능 SQL문을 사용할 수 있는 곳이라면 어디라도 PL/SQL Block을 사용할 수 있음 PL/SQL Block을 사용하기 위해서는Keyword EXEC SQL EXECUTE 및 END-EXEC; 사이에 PL/SQL Block을 포함 시켜야함 Ex)

75 내장 PL/SQL : 실습

76 내장 PL/SQL : 실습

77 내장 PL/SQL : 실습 proc plsql.pc SQLCHECK=SEMANTICS

78 내장 PL/SQL : 실습 실행결과

79 내장 PL/SQL : 내장 SQL의 비교 내장 SQL 내장 PL/SQL

80 내장 PL/SQL : 실제 사용 예

81 내장 PL/SQL : Stored PL/SQL Call
다음 예는 raise_salary라는 이름의 Stored Procedure를 호출 EXEC SQL EXECUTE BEGIN raise_salary(:emp_id, :increase); END; END-EXEC; 다음 예는 emp_actions이란 Package에 속하는 raise_salary란 이름의 Stored Procedure를 호출 emp_actions.raise_salary(:emp_id, :increase); Parameter는 IN, OUT 두종류가 있음 내장 PL/SQL이 포함된 Program을 PreCompile하는 경우에는 SQLCHECK=SEMANTICS Compile Option을 사용해야 함

82 내장 PL/SQL : Stored PL/SQL Call : 실습

83 내장 PL/SQL : Stored PL/SQL Call : 실습

84 내장 PL/SQL : Stored PL/SQL Call : 실습

85 내장 PL/SQL : Stored PL/SQL Call : 실습

86 내장 PL/SQL : Stored PL/SQL Call : 실습
실행결과

87 내장 PL/SQL : 심화문제 주어진 emp.data파일의 내용을 EMP table에 추가
emp.data파일 형식은 CSV의 Text File 내장 SQL및 내장 PL/SQL 어느쪽을 사용해도 무방 Hint : C function : fopen, fgets, fclose, strtok, strstr, strcpy, strncpy, strcat, strcmp, strlen, sizeof SQL : TO_DATE

88 내장 PL/SQL : 심화문제 File emp.data의 내용
9369,JANG,CLERK,7902,2008/12/17,800,,20 9499,BAE,SALESMAN,7698,2008/02/20,1600,300,30 9521,HWANG,SALESMAN,7698,2008/02/22,1250,500,30 9566,PARK,MANAGER,7839,2008/04/02,2975,,20 9654,KIM,SALESMAN,7698,2008/09/28,1250,1400,30 9698,MOON,MANAGER,7839,2008/05/01,2850,,30 9782,CHOI,MANAGER,7839,2008/06/09,2450,,10 9788,HAN,ANALYST,7566,2008/04/19,3000,,20 9844,LEE,SALESMAN,7698,2008/09/08,1500,0,30 9876,RYU,CLERK,7788,2008/05/23,1100,,20

89 내장 PL/SQL : 심화문제 Table EMP의 구조 TABLE SCOTT.EMP (
EMPNO NUMBER(4,0) NOT NULL, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4,0), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2,0), CONSTRAINT PK_EMP PRIMARY KEY (EMPNO) USING INDEX, CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCES SCOTT.DEPT (DEPTNO) )

90 내장 PL/SQL : 심화문제 실행결과


Download ppt "Proc*C 기초 Style System 김도형."

Similar presentations


Ads by Google