1. Pro*C란 ?
대부분의 DBMS는 외부 C 프로그램에서 DB관련 로직을 짤 수 있게 선행 컴파일러를 제공한다. Pro*C란 오라클에서 제공해주는 선행 컴파일러이다. 오라클은 PL/SQL이라는 절차형 언어를 제공한다. 하지만 PL/SQL은 오라클 내부에서 실행되는 프로그램이다. Pro*C는 선행 컴파일러이기 때문에 이 자체만으로 실행파일을 만들어낼 수 없다. Pro*C파일(.pc)파일은 컴파일되어 C프로그램 파일(.c)을 만들어낸다. 그 이후로는 C 프로그램과 똑같다.
2. Pro*C 컴파일 하는 법
소스파일은 SQL문을 포함하며 확장자 .PC를 갖는다. 이 경우 컴파일을 두 번 해주어야 한다.
Pro*C 컴파일로 C 파일을 생성하고, C파일을 다시 컴파일해서 실행파일을 만들어 줘야 한다.(.c -> .o -> .exe)
1) proc 명령어로 컴파일
ex hello.pc 파일을 컴파일 할 경우
proc hello.pc
이 결과로 hello.c 파일이 생성되게 된다.
인풋파일명, 아웃풋파일명 지정하고 싶을 때는
proc iname=hello.pc oname=hello.c.20230109
iname(in), oname(out)옵션 추가
2) proc로 컴파일한 결과물로 실행파일을 만들경우
리눅스, 유닉스에서
cc -|${ORACLE_HOME}/precomp/public -L${ORACLE_HOME}/lib -lclntsh hello.c -o hello
{ORACLE_HOME}/precomp/public에는 sql처리 관련된 헤더파일 저장되어있음 이 헤더파일을 컴파일이 찾아 링크할 수 있도록 -|{ORACLE_HOME}/precomp/public 옵션 넣음.
윈도우에서는 gcc~
3) 컴파일을 위한 makefile 제작
https://sidepower.tistory.com/513
https://jhnyang.tistory.com/532
3. Pro*C 사용법
1) 모든 SQL문에 EXEC SQL이라는 접두사를 붙인다.
2) Pro*C프로그램에 포함되어 있는 SQL문은 실행문 혹은 선언문중의 하나로 분류할 수 있다.
3) 실행문 : DML, DDL, DCL 등 SQL 실행문을 실행한 후 SQLCA(SQL 통신영역)에는 일련의 리턴코드가 저장된다.
4) 논리적 작업단위는 최초의 SQL 실행문을 실행하면서 시작된다. 따라서 CONNECT, COMMIT, ROLLBACK WORK 문의 다음에 첫 번재로 나타나는 SQL 실행문부터 논리적인 작업단위가 새롭게 시작된다.
선언절
/* 선언절로 호스트변수 또는 표지변수를 선언 */
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
/* 예시 */
EXEC SQL BEGIN DECLARE SECTION;
int pempno; /* 사번 */
char pname[11]; /* 성명 */
int pdeptno; /* 부서 */
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT deptno, ename
INTO :pdeptno, :pname
FROM emp
WHERE empno = :pempno;
1) SQL문 앞에서는 앞에 콜론(:)을 붙인다.
2) C 문에서는 앞에 콜론을 붙이지 않는다.
3) 포인터 변수는 C에서 통상적으로 행하는 방법으로 선언함으로써, 선언절 내에서 사용할 수 있다.
EXEC SQL BEGIN DECLARE SECTION;
int I, j, *intptr;
char *cp;
EXEC SQL END DECLARE SECTION;
https://sunder4.tistory.com/46
3-1 Pro*C Cursor
EXEC SQL DECLARE hello_cursor FOR
SELECT * FROM TEST;
EXEC SQL OPEN hello_cursor;
while(1) {
EXEC SQL FETCH hello_cursor INTO : test_var...
}
EXEC SQL CLOSE hello_cursor;
https://goddaehee.tistory.com/117
4. 예제들
#1. 예제
/* ORACLE의 로그온과 로그오프 */
#include
/***************************************************************
This is sample Pro*C program which will log onto a database asscott/tiger.
***************************************************************/
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR uid[20];
VARCHAR pwd[20];
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE SQLCA;
void main(void){
/* log into ORACLE */
strcpy(uid.arr, "SCOTT");
/* copy the user name */
uid.len = strlen(uid.arr);
strcpy(pwd.arr, "TIGER");
/* copy the password */
pwd.len = strlen(pwd.arr);
EXEC SQL CONNECT :uid IDENTIFIED BY :pwd;
printf("Connected to ORACLE user : %s\n", uid.arr);
EXEC SQL COMMIT WORK RELEASE; /* log off database */
exit(0);
}
'CS > DataBase' 카테고리의 다른 글
ORACLE 쿼리 조인, 쿼리 튜닝 (0) | 2023.03.10 |
---|---|
Lock, DeadLock, Blocking (0) | 2023.03.10 |
ORACLE 실행계획, Hint, SQL 튜닝 (0) | 2022.12.31 |
ORACLE 식별자 (0) | 2022.12.31 |
DB ConnectionPool (0) | 2022.12.30 |