[번역] Embedded PL/SQL - 04
Language/Pro*C 2015. 5. 20. 17:15목 차
▣ PL/SQL의 장점( Advantages of PL/SQL )
▣ Embedded PL/SQL Blocks
▣ 호스트 변수( Host Variables )
▣ 지시자 변수( Indicator Variables )
▣ 호스트 배열 ( Host Arrays )
▣ 임베디트 PL/SQL에서 커서 사용방법 (Cursor Usage in Embedded PL/SQL )
▣ Stored PL/SQL and Java Subprograms
▣ 외부 프로시져( External Procedures )
▣ Dynamic SQL 사용 ( Using Dynamic SQL )
8) 외부 프로시져( External Procedures )
PL/SQL에서 C함수를 사용할수 있다. C함수는 동적라이브러리 내에 저장되어 있는것으로
사용하는 방법은 아래와 같다.
EXEC SQL REGISTER CONNECT USING :epctx [RETURNING :host_context] ;
epctx는 external procedure context이다. 이것을 이용하여 OCIEnv, OCISvcCtx, OCIError등과
같은 OCI핸들을 사용할 수 있게 되는것이다.
8-1) 외부 프로시져의 제한 사항
- C++외부프로시져는 지원않한다.
- 외부프로시져 Context에 연결시 추가연결은 않된다.
- EXEC SQL ENABLE THREADS문을 사용할 수 없다.
- DDL문을 사용할 수 없다.
- EXEC SQL COMMIT / ROLLBACK문을 사용할 수 없다.
- EXEC SQL OBJECT문과같은 오브젝트문을 사용할 수 없다.
- EXEC SQL LOB문을 사용할 수 없다.
- EXEC TOOLS문을 사용할 수 없다.
PL/SQL에서 C함수를 사용할수 있다. C함수는 동적라이브러리 내에 저장되어 있는것으로
사용하는 방법은 아래와 같다.
EXEC SQL REGISTER CONNECT USING :epctx [RETURNING :host_context] ;
epctx는 external procedure context이다. 이것을 이용하여 OCIEnv, OCISvcCtx, OCIError등과
같은 OCI핸들을 사용할 수 있게 되는것이다.
8-1) 외부 프로시져의 제한 사항
- C++외부프로시져는 지원않한다.
- 외부프로시져 Context에 연결시 추가연결은 않된다.
- EXEC SQL ENABLE THREADS문을 사용할 수 없다.
- DDL문을 사용할 수 없다.
- EXEC SQL COMMIT / ROLLBACK문을 사용할 수 없다.
- EXEC SQL OBJECT문과같은 오브젝트문을 사용할 수 없다.
- EXEC SQL LOB문을 사용할 수 없다.
- EXEC TOOLS문을 사용할 수 없다.
8-2) 외부 프로시져 생성
생성하는 예제는 아래와 같다.
생성하는 예제는 아래와 같다.
CREATE OR REPLACE PROCEDURE extp1
AS EXTERNAL NAME "extp1"
LIBRARY mylib
WITH CONTEXT
PARAMETERS(CONTEXT) ;
AS EXTERNAL NAME "extp1"
LIBRARY mylib
WITH CONTEXT
PARAMETERS(CONTEXT) ;
SQL*Plus에서는 아래와 같이 사용한다.
SQL>
BEGIN
INSERT INTO emp VALUES(9999,’JOHNSON’,’SALESMAN’,7782, sysdate, 1200,150,10);
extp1;
END;
BEGIN
INSERT INTO emp VALUES(9999,’JOHNSON’,’SALESMAN’,7782, sysdate, 1200,150,10);
extp1;
END;
아래의 내용은 extp1.pc파일의 리스트이다.
void extp1 (epctx)
OCIExtProcContext *epctx;
{
char name[15];
EXEC SQL REGISTER CONNECT USING :epctx;
EXEC SQL WHENEVER SQLERROR goto err;
EXEC SQL SELECT ename INTO :name FROM emp WHERE empno = 9999;
return;
err: SQLExtProcError(SQL_SINGLE_ RCTX,
OCIExtProcContext *epctx;
{
char name[15];
EXEC SQL REGISTER CONNECT USING :epctx;
EXEC SQL WHENEVER SQLERROR goto err;
EXEC SQL SELECT ename INTO :name FROM emp WHERE empno = 9999;
return;
err: SQLExtProcError(SQL_SINGLE_ RCTX,
sqlca.sqlerrm.sqlerrmc,sqlca.sqlerrm.sqlerrml);
return;
}
return;
}
9) Dynamic SQL 사용 ( Using Dynamic SQL )
PL/SQL블록내에 호스트변수를 포함하고 있지 않다면, Dynamic SQL Method 1을
사용할 수 있고, 호스트 변수를 포함하고 있다면 Dynamic SQL Method 2를 사용
할 수 있다.
PL/SQL블록내에 호스트변수를 포함하고 있지 않다면, Dynamic SQL Method 1을
사용할 수 있고, 호스트 변수를 포함하고 있다면 Dynamic SQL Method 2를 사용
할 수 있다.
출처 - http://younbok.egloos.com/9342719
'Language > Pro*C' 카테고리의 다른 글
[번역] 호스트배열 (Host Arrays) - 02 (0) | 2015.05.20 |
---|---|
[번역] 호스트배열 (Host Arrays) - 01 (0) | 2015.05.20 |
[번역] Embedded PL/SQL - 03 (0) | 2015.05.20 |
[번역] Embedded PL/SQL - 02 (0) | 2015.05.20 |
[번역] Embedded PL/SQL - 01 (0) | 2015.05.20 |