Dev/DBMS
Pro*c를 이용한 오라클 PL/SQL function 호출
newtype
2009. 4. 10. 10:28
Proc*c를 이용해 Sub Program(Procedure or Function)을 호출 하는 방법에 대해 설명한다.
자료를 찾아보면 대부분의 샘플 코드가 Procedure 로만 되어 있다.
여기서는 Function을 호출 해 보기로 한다.
사실 호출 방법은 거의 비슷 하다.
- 컴파일 방법
PL/SQL 구문을 사용하기 때문에 proc 컴파일 옵션을 주어야 한다.
그런데, 컴파일 옵션을 주면 다른 Pro*c 구문에서 컴파일이 안되는 일이 발생을 한다.
따라서, PL/SQL 구문을 사용하는 소스는 별도 .pc 파일로 때어 내어서 별도 컴파일을 해야한다.
$ proc include=../inc iname=sub.pc SQLCHECK=SEMANTICS userid=oracleid/oraclepwd
여기서 기존 컴파일 방법과 다른 부분은 "SQLCHECK=SEMANTICS" 옵션이 추가된 것과,
userid 옵션이 추가된 것이다.
userid 옵션에는 오라클 로긴을 위한 ID와 Password를 넣어 준다.
- 샘플 소스
/** @file sub.pc * @brief Remote Function Call * @author newtype * @date 2009-04-10 */ #ifndef _SUB_PC_ #define _SUB_PC_ #include "common.h" EXEC SQL INCLUDE SQLCA; /** @brief 오라클 Function을 호출 한다. * @param in [IN] 오라클 Fucntion Parameter * @param out [OUT] 오라클 Fucntion Return 값을 반환 * @return 0 정상처리 * @return 그외 오라클 에러 코드 * @remarks 참고 사항 * @warning 주의 사항 */ int CallOracleFunction(char* in, char* out) { EXEC SQL BEGIN DECLARE SECTION; char szOut[MAX_BUF] = ""; EXEC SQL END DECLARE SECTION; EXEC SQL EXECUTE BEGIN :szOut := ORA_SAMPLE_FUNC( in ); IF szOut = 'newtype' THEN strcpy( out, szOut) ; COMMIT; ELSE strcpy( out, 'newtype.pe.kr'); ROLLBACK; END IF; END; END-EXEC; return nErrCode; } #endif
반응형