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 |