어느 가을날의 전환점

PROC|오라클 프로씨(Pro *C/*C++ ) 본문

Development

PROC|오라클 프로씨(Pro *C/*C++ )

어느가을빛 2010. 7. 16. 15:45
Pro *C(이하 proc) 는 일종의 프리컴파일러다. 즉 C코드에 오라클관리를 위해서 일상적으로 사용하는 SQL, PL/SQL 등을 결합시켜서 코딩된 프로그램을 C컴파일러(여기에서는 gcc)가 인식할수 있는 C 코드 파일로 변경시켜주는 일을 한다. 오라클에서는 proc 라는 프리컴파일러를 제공하고 있다.


proc 컴파일 과정
1) Proc Program(.pc): SQL문을 포함
2) 오라클 선행컴파일러 proc
3) 해석된 소스코드(.c): 기존의 SQL 문을 librayr를 직접 호출하는 문으로 변경 됨.
4) C 컴파일러
5) Object 파일
6) Linker: 오라클 라이브러리가 링크 됨.
7) 실행파일

...
주석
/* ... */ 만 사용 가능.
// 사용 불가.


SQL은 인터페이스와 구성요소로 나누어진다.

인터페이스는 대화형 SQL(SQL*Plus)과 내장형 SQL(C, C++)로 나누어진다.
구성요소는 DDL(정의어), DML(조작어), DCL(제어어)로 나누어진다.


내장형 SQL를 사용하는 이유

대화식 SQL은 호스트언어(C, C++)가 갖고 있는 조건문, 반복문, 입출력 등과 같은 기능을 가지고 있지 않아서 일괄처리시나 
동일한 업무 반복시에는 사용이 부적합하다. 이때는 내장형 SQL를 사용하면 된다.

※ 오라클에서 제공하는 예비 컴파일러인 Pro*C는 내장형 SQL문이 포함된 소스파일을 C소스로 컴파일해고 이때 컴파일되는 
소스의 확장자는 pc(Pro*C)이다.
※ DB2도 오라클과 같은 예비 컴파일러를 제공하는데 보통 DB2 Pro*C라고 부른다.
※ 내장형SQL에서 사용하는 SQL문법은 PL/SQL과 비슷하다.


내장형SQL 용어

단일행 선택연산
질의가 하나의 튜플(레코드)만 생성

커서(Cursor)
1. 커서는 결과 릴레이션의 모든 튜플들을 튜플단위로 가리킨다. 각 튜플은 차례대로 호스트 변수로 인출(FETCH)되어 호스트 언어 프로그램에 의해 처리될수 있다.
2. 내장형 SQL문의 실행결과로 반환된 복수개의 튜플들을 접근할수 있도록 도와주는 개념
3. 질의 실행 결과로 반환된 테이블의 튜플들을 순서대로 가리키는 튜플에 대한 포인터로 생각하면 됨
4. 커서를 이용해서 질의 결과로 반환된 튜플들을 한번에 하나씩 차례로 처리 가능하다.

DECLARE
커서를 정의하는등 커서에 관련된 선언을 하는 명령어

OPEN
커서가 질의 결과의 첫번째 튜플을 가리키도록 설정하는 명령어

FETCH
질의 결과에 대한 다중 튜플을 가지고 있는 커서에서 현재의 다음 튜플로 이동시키는 명령어

CLOSE
질의 실행 결과에 대한 처리 종료시 커서를 닫기위해 사용하는 명령어(커서 종료 명령)


간단한 내장형 SQL사용예제

//# 호스트변수 선언
EXEC SQL BEGIN DECLARE SECTION
int SNO;
char SNAME[20];
char DEPT[6];
char SQLSTATE[5];
EXEC SQL END DECLARE SECTION

//# 호스트변수에 대입
SNO = 100;

//# 쿼리실행 및 단일로우조회
EXEC SQL SELECT SNAME, DEPT
INTO :SNAME, :DEPT
FROM STUDENT 
WHERE SNO = :SNO;

※ SQLSTATE가 '00000' 이면 정상실행, '02000' 이면 튜플이 없음
※ 내장형 SQL이 실행후 SQLSTATE 묵시적 변수에 성공, 실패, 오류에 관련된 코드값이 문자형 정수값으로 대입된다.

참조
Comments