본문 바로가기

ProC

Pro*C 컴파일

Pro*C 컴파일

일단 "sample.pc"로 어플리케이션 프로그램의 코딩이 끝났으면 Pro*C 프리컴파일을 해야 한다.

proc INAME=sample1.pc
proc sample1.pc

proc에서 사용되는 프리컴파일러 옵션들의 Default 값들은 프리컴파일러 내에 포함되어 있고,

Pro*C System Configuration file에 있고, 또 user configuration file을 작성하여 지정할 수도 있다.

예를 들어 MAXOPENCURSORS라는 옵션은 프리컴파일러 내에 10으로 되어있는데,

system 환경화일에 MAXOPENCURSORS=32라고 하면 Default값은 32가 되는 것이다 .

또 user가 정의한 환경화일을 지정해 주면 Default 값은 그 값으로 변경된다 .

system configuration file 시스템 마다 다르지만 $ORACLE_HOME/proc/pmscfg.h

오라클7.3.X 버젼에서는 $ORACLE_HOME/ precomp/admin 디렉토리에 위치한다.

config 화일의 지정

$proc config=my_config_file.h ...

Default 옵션을 보려면

$proc

하면 된다 .

config 화일의 생성

config 화일은 각 라인마다 하나의 옵션과 값을 주면 된다 .

MODE=ANSI
CODE=ANSI_C
실행화일의 작성

make 유틸리티

"makefile" 이라는 특수한 형식에 저장되어 있는 일련의 의존규칙들에 근거하여 화일을최신 버전으로 개정하는 유틸리티이다 .

-f 옵션은 만들고자 하는 화일 이름을 명시할 수 있게 한다 .만일 이름이 명시되지 않으면 , "makefile" 로 간주한다.

Pro*C 의 makefile 은 $ORACLE_HOEM/precom/demo/proc 에 존재하는 proc.mk 를 자신의 작업 디렉토리에 copy 하여 변경하여 작성하면 된다.

proc.mk 화일은 Pro*C 프로그램을 컴파일하여 실행화일을 생성하는 일련의 작업들을기술해 놓은 것이다.

위의 명령은 proc.mk 라는 makefile 을 이용하여 makefile 안에 있는 sample1 이란 lable 의 구성대로 실행한다.

sample1 이라는 lable 에는 proc 를 구동시키고 , cc 를 구동시키는 부분을 정의한다 .

Precompiler Options

문법 default 설명
AUTO_CONNECT NO 자동 OPS$ 로그인
CODE=ANSI_C|KR_C|CPP KR_C 생성 C 코드 타입
CONFIG=<filename> NO 사용자정의 cinfig 화일
CPP_SUFFIX NO output 화일의 확장자 정의
DBMS-V6|V7|NATIVE|V6_CHAR NATIVE 데이타베이스 버젼간의 호환성 정의
DEFINE=<name> NO Pro*C 프리프로세서에서 사용될 이름 정의
DEF_SQLCODE NO #define SQLCODE 를 생성
ERROR=YES|NO YES

에러메세지 출력할 위치지정

YES: stdout, NO: list 화일

FIPS=NONE|SQL89|SQL2 NONE whether to flag ANSI/ISO non-compliance
HOLD_CURSOR=YES|NO NO 커서 cache 를 sql 문으로 핸들링한다
INAME=<filename> NO 입력화일 이름
INCLUDE=<pathname> NO EXEC SQL INCLUDE 나 #include 문장을 위한 디렉토리 path 지정
LINES=YES|NO NO whether #line directives are generated
LNAME=<filename> none 리스트화일명
=10..1024 1024 string literals 의 최대길이
MAXOPENCURSOR=5..255 10 최대커서 갯수
ONAME=<filename> none output 화일명
ORACA=YES|NO NO ORACA 의 사용여부
RELEASE_CURSOR NO 커서캐쉬에서 커서를 제어
SELECT_ERROR YES SELECT 에러를 FLAG
SQLCHECK SYNTAX 컴파일시 SQL CHECK
SYS_INCLUDE none 시스템 헤더화일의 디렉토리 설정
USERID NO USERNAME/PASSWORD 지정
프리컴파일 옵션의 영향 범위

위의 옵션들은 하나의 C 소스 프로그램에서만 유효하다.

만약 A 라는 UNIT 에 프리컴파일러 옵션인 HOLD_SURDOR=YES 그리고 RELEASE_CURSOR=YES 가 정의되어 있고,

B UNIT 에는 없다면 A 는 옵션의 영향을 받고 B 는 DEFAulT 값의 영향을 받는다.

프리컴파일 옵션의 사용 프리컴파일 옵션은 명령행에서도 사용가능하고 또 SOURCE 에 포함할 수도 있다 .

명령행에서의 사용은

[OPTION_NAME=value] [OPTION_NAME=value] ...

로 사용하고 각각의 옵션사이는 공백으로 구분한다 . 예를 들어

CODE=ANSI_C MODE=ANSI

또 인라인으로 SOURCE 내에 삽입하여 사용가능한데 , 이때는 "EXEC ORACLE" 이라는 문구를사용하여 삽입한다 .

EXEC ORACLE OPTION (OPTION_NAME=value);

예를 들어

EXEC ORACLE OPTION (RELEASE_CURSOR=yes);

SOURCE 파일에 포함되어진 옵션들도 명령행이나 CONFIGURATION 화일에 중복하여 사용할수 있다 .

이 "EXEC ORACLE" 구문은 특히 프리컴파일 도중에 옵션을 변경할 때 유용하다 .

EXEC ORACLE 의 유효범위는 SOURCE 화일내에 같은 옵션으로 EXEC ORACLE 이 사용된 이전까지유효하다 .  

AUTO_CONNECT

자동으로 OPS$ 계정으로 connect 한다 .

YES 이면 어플리케이션 프로그램이 첫 SQL 문장을 실행할 시점에서 OPT$ 계정으로 CONNECT를 시도한다 .

NO 이면 자동 CONNECT 는 되지 않고 SOURCE 화일내에 CONNECT 문장이 존재해야 한다 .

CODE

C 함수의 어떤 프로토타입을 생성시키는 지 정한다.

ANSI_C 는 X3.159-1989 에서 제공한 표준을 제공한다.

ANSI_C 표준으로 생성한다.

extern void(sqlora(long *, void *);

CODE=KR_C 이면

extern void sqlora(/*_ long *, void * */);

CODE=CPP 이면 C++ 에 맞는 SOURCE CODE 를 생성시킨다.

CONFIG

사용자 지정 CONFIGURATION 화일을 지정한다 . 각 라인마다 한개의 옵션이 들어가게 화일을 생성해 이름을 지정한다 .

CPP_SUFFIX

C++ 옵션으로 SOURCE 화일의 확장자를 지정한다 .

DBMS

문법을 정의한다 . NATIVE : 접속되는 데이타 베이스에 SETTING 된 테이블에 따른다 .

DEF_SQLCODE

#define SQLCODE sqlca.sqlcode

DEFINE

프리프로세서의 매크로를 컴파일 시점에서 선언한다 . SOURCE 화일에 아래와 같이 정의 되어 있다면

#ifdef XYZZY
....
#else
...
#endif
proc my_prog DEFINE=XYZZY

로 프리컴파일하면 #define XYZZY 를 SOURCE 에 포함시킨것과 같다 .

EXEC ORACLE IFDEF XYZZY;
...
EXEC ORACLE ELSE;
...
EXEC ORACLE ENDIF;

도 같은 효과를 나타낸다 .

ERRORS

에러를 터미널로 보낼 것인지 (NO), 리스트 화일로 보낼 건지를 (YES) 결정

HOLD_CURSOR

SQL 문이나 PL/SQL 블럭을 커서 캐쉬안에서 보관시킬 건지를 결정한다 .

INAME

SOURCE 화일명을 명시한다 .

proc sample MODE=ANSI proc INAME=sample1 MODE=ANSI

INCLUDE

컴파일시 포함되어져야 할 화일의 디렉토리명을 명시한다 .

#include 나 EXEC SQL INCLUDE 문에서 명시된 화일들이 위치한 곳을 명시한다 . 컴파일시 헤더 화일을 찾는 순서는

1. SYS_INCLUDE 로 지정되어진 디렉토리
2. 현재 디렉토리
3. standard 헤더 화일의 디렉토리
4. INCLUDE 옵션으로 지정된 디렉토리

IRECLEN

SOURCE 화일의 한 라인의 길이를 정한다 . default 로 80 으로 지정되어 있다 .

LNAME

리스트 화일의 이름을 명시한다 .

LRECLEN

리스트 화일의 한 라인의 길이를 나타낸다 .( 기본값 :132)

LTYPE

생성될 리스트 화일의 타입을 설정한다 .( 기본값:LONG)

MAXLITERAL

(8~1024) 사이의 값으로 문자 LITERAL 의 최대길이를 설정한다 . ( 기본값 1024)

MAXOPENCURSORS

동시에 OPEN 할 수 있는 최대 커서의 갯수를 설정한다 . (5~255) 기본값:10

ONAME

OUTPUT 화일명을 명시한다 .

기본적으로 INAME 의 뒤에 CPP_SUFFIX 를 붇여 출력한다 .

proc iname=my_test proc iname=my_test oname=my_test_1.c

ORACA

ORACA 의 사용여부를 설정한다 .

ORACA=YES 면 SOURCE 프로그램내에 EXEC SQL INCLUDE ORACA.H 나 #include oraca.h 를 포함해야만 한다 .

ORECLEN

OUTPUT 화일의 한 라인의 길이를 설정 ( 기본값 80), (80~255)

PAGELEN

리스트화일의 PAGE 길이를 설정 ( 기본값 없음 )(30~255)

RELEASE CURSOR

커서의 보관을 취소한다 .

SQLCHECK

SQL 문의 검사를 설정한다 .

SQLCHECK=SEMANTICS
데이타조작문 , PL/SQL 블럭 , 호스트변수의 데이타 타입을 검사
SQLCHECK=FULL
SQL 문장 및 데이타베이스에 접속해 현재의 SQL 문장의 유효성을 검사한다 . USERID 가 정의되어 있어야 한다 .
SQLCHECK=SYNTAX
SQL 문장의 문법적인 오류만 검사
SQLCHECK=SYMANTICS PL/SQL 블럭이 SOURCE 내에 포함되어 있으면 USERID 와 함께 이 옵션을 써야 한다 .
  • SYS_INCLUDE
  • :시스템 헤더 화일의 디렉토리를 설정한다 .
  • USERID
  • :오라클 USERID 와 PASSWORD 를 명시한다 .
USERID=username/password

'ProC' 카테고리의 다른 글

ORA-01405: fetched column values is NULL  (0) 2011.10.16
Pro*C 어플리케이션의 작성  (0) 2011.10.16
Dynamic SQL의 사용  (0) 2011.10.16
SQLCA(SQL Communication Area)  (0) 2011.10.16
Pro*C에서 변수의 사용  (0) 2011.10.16