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
반응형
'Dev > DBMS' 카테고리의 다른 글
Oracle Bulk Loader (0) | 2009.08.27 |
---|---|
Oracle import / export (0) | 2009.05.21 |
ORA-01002 fetch out of sequence (0) | 2008.07.11 |
oracle 유용한 쿼리 (0) | 2006.07.07 |
Sql CE를 EVC로 구현하고자 하는데 통 답이 없네요 (1) | 2004.01.20 |