4절. 간단한 proc 프로그램 예제
다음은 zipcode 테이블에 총몇개의 자료가 들어있는지 알아오는 아주 간단한 프로그램이다.
예제 : zipcode.pc
#include <stdio.h> #include <unistd.h> /* SQLCA 를 선언한다 */ EXEC SQL INCLUDE SQLCA; int main(int argc, char **argv) { /* 선언부 */ EXEC SQL BEGIN DECLARE SECTION; int count = 0; char userid[40]= "system/manager@ORACLE"; EXEC SQL END DECLARE SECTION; /* DB 연결 */ EXEC SQL CONNECT :userid; /* 에러 처리 */ if (sqlca.sqlcode < 0) { printf("%s\n", sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK WORK RELEASE; exit(0); } /* 쿼리 */ EXEC SQL SELECT count(*) INTO: count FROM zipcode; /* 쿼리 결과에 대한 에러처리 */ if (sqlca.sqlcode != 0) { EXEC SQL COMMIT WORK RELEASE; return 0; } printf("우편주소 데이타 : %d 개\n", count); /* DB 연결 종료 */ EXEC SQL COMMIT WORK RELEASE; } |
이번 문서는 단지 이런식으로 프로그래밍이 가능하다라는 정도만 보여줄 것임으로 위의 코드의 설명은 생략하도록 하겠다. 나중에 자세히 다루도록 하겠다.
4.1절. 컴파일 하기
우선 zipcode.pc 파일을 proc 선행 컴파일러를 이용해서 zipcode.c 파일을 얻어낸다음 gcc를 이용해서 object 파일을 만들고 링크과정을 거쳐서 실행파일을 만들어야 한다. 다음은 이러한 일련의 과정이다.
[oracle@localhost proc]$ proc zipcode INCLUDE=include/ \ > include=/usr/u01/product/8.1.7/precomp/public/ \ > include=/usr/u01/product/8.1.7/rdbms/demo/ \ > include=/usr/u01/product/8.1.7/rdbms/public/ \ > include=/usr/u01/product/8.1.7/network/public/ \ > PARSE=NONE RELEASE_CURSOR=YES MODE=ANSI Pro*C/C++: Release 8.1.7.0.0 - Production on Thu Oct 31 00:29:15 2002 (c) Copyright 2000 Oracle Corporation. All rights reserved. System default option values taken from: /usr/u01/product/8.1.7/precomp/admin/pcscfg.cfg [oracle@localhost proc]$ gcc -c -o zipcode.o zipcode.c -I$ORACLE_HOME/precomp/public \ > -I$ORACLE_HOME/rdbms/demo -I$ORACLE_HOME/rdbms/public \ > -I$ORACLE_HOME/network/public [oracle@localhost proc]$ gcc -o zipcode zipcode.o -L$ORACLE_HOME/lib -lclntsh |
[oracle@localhost proc]$ ./zipcode 우편주소 데이타 : 43476 개 |
4.2절. 컴파일 과정을 Makefile 로 관리하기
하지만 위의 방법대로 수동으로 코드를 컴파일 하는건 비 생산적인 방법이다. 그러므로 Makefile 을 만들어서 관리하도록 하자.
Makefile
TARGET = zipcode CC = gcc PROC = proc LIB = -L$(ORACLE_HOME)/lib -lclntsh MYINC = include/ PROCINC = include=$(ORACLE_HOME)/precomp/public/ include=$(ORACLE_HOME)/rdbms/demo/ \ include=$(ORACLE_HOME)/rdbms/public/ \ include=$(ORACLE_HOME)/network/public/ CINC = -I$(ORACLE_HOME)/precomp/public/ -I$(ORACLE_HOME)/rdbms/demo/ \ -I$(ORACLE_HOME)/rdbms/public/ -I$(ORACLE_HOME)/network/public/ ORA_OPT = PARSE=NONE RELEASE_CURSOR=YES MODE=ANSI CC_OPT = OBJECT = zipcode.o ORA_GARBAGE = *.dcl *.cod *.cud *.lis ######## implicit rules .SUFFIXES: .pc .c .pc.c: $(PROC) $* INCLUDE=$(MYINC) $(PROCINC) $(ORA_OPT) .c.o: $(CC) -c -o $*.o $*.c -I $(MYINC) $(CINC) ####### build rules all: $(TARGET) $(TARGET): $(OBJECT) $(CC) -o $(TARGET) $(OBJECT) $(LIB) zipcode.c: zipcode.pc zipcode.o: zipcode.c clean: rm -f $(TARGET) $(OBJECT) $(ORA_GARBAGE) |
출처 :
댓글 없음:
댓글 쓰기