1 / 90

Proc*C 기초

Proc*C 기초. Style System 김도형. 강의목표. Pro*C/C++ 에 대한 개념을 이해 할수 있다 Embedded SQL 을 사용할 수 있다 Cursor 를 사용할 수 있다 Embedded PL/SQL 을 사용할 수 있다 Procedure 를 호출 할 수 있다 Error Handling 을 할 수 있다 개인적으로 Pro*C/C++ 를 공부할수 있는 토대를 마련할 수 있다. 강의에서 다루지 않는 내용. Dynamic Cursor Savepoint Large Object: LOB

aspen
Télécharger la présentation

Proc*C 기초

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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. bin\proc.exe을 확인 Window에서의 Pro*C의 설치(2/4)

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

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

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

  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) 추가 INCLUDE DIRECTORY : C:\oracle\ora92\precomp\public : header file의 경로를 입력 DEBUG 정보 형식 : Editor Continue용 Program DB를 선택 Project 환경설정

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

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

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

  19. Visual C++의 환경 설정 (9/11) C/C++ File Extension : “;*.pc”를 추가 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 형 • 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 변수 • 입력 Host 변수에 사용시 • -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에 질의를 수행 • Ex) EXEC SQL SELECT ename, job, sal + 2000 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 • 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 : 프로그램 수행을 종료하고, 트랜잭션은 롤백됨.

More Related