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 |