[번역] Embedded PL/SQL - 02

Language/Pro*C 2015. 5. 20. 17:14

목 차
▣ 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 )

5) 호스트 배열 ( Host Arrays )
PL/SQL블록에서 입력호스트배열과 지시자 배열을 넘길 수 있다.

아래의 예제에서, 함수 호출시에 배열을 사용하는 salary라고 이름 붙여진
배열을 넘긴다. 이 함수는 값들중에서 중간값을 취득하기위해서 mdidan이라고
이름붙여졌으며, 이 함수의 형식적인 파라미터는 num_tab이라고 이름 붙여진
PL/SQL테이블을 포함하고 있다. 그 호출 함수는 실제 파라미터 salary에
모든값을 형식적인 파라미터 num_tab의 행에 할당한다.

...

float salary[100];

/* populate the host array */

EXEC SQL EXECUTE
DECLARE
TYPE NumTabTyp IS TABLE OF REAL
INDEX BY BINARY_INTEGER;
median_salary REAL;
n BINARY_INTEGER;
...

FUNCTION median (num_tab NumTabTyp, n INTEGER)
RETURN REAL IS
BEGIN
-- compute median
END;
BEGIN
n := 100;
median_salary := median(:salary, n);
...

END;
END-EXEC;
...

테이블 7-1은 PL/SQL테이블에서 행을 값들과 호스트 배열의 요소들 사이에
가능한 변환을 보여주고 있다. 예를들어, LONG형의 호스트 배열은
VARCHAR2, LONG, RAW, 혹은 LONG RAW형의 PL/SQL 테이블과 호환되며,
CHAR형과는 호환되지 않는다.






5-1) ARRAYLEN문
입력호스트 변수를 PL/SQL block에 넘겨야만 한다고 가정해보자. 기본적으로,
호스트 배열을 사용할때, Proc*C/C++ 전처리기는 선언된 수치를 사용한다.
하지만 선언된 수치를 전부 사용할 필요가 없을경우, ARRAYLEN문을 사용해서 작은
배열 수치를 적용할 수 있다.
적용하는 문법은 다음과 같다 :

EXEC SQL ARRAYLEN host_array (dimension) [EXECUTE];
4바이트 정수 호스트 변수 (문자는 않됨)

아래의 예제는 bonus라고 이름붙여진 C 호스트배열의 기본 수치를 그대로 사용하기
위해서 ARRAYLEN문을 사용한 예제이다.

float bonus[100];
int dimension;

EXEC SQL ARRAYLEN bonus (dimension);

/* populate the host array */
...

dimension = 25; /* set smaller array dimension */
EXEC SQL EXECUTE
DECLARE
TYPE NumTabTyp IS TABLE OF REAL
INDEX BY BINARY_INTEGER;
median_bonus REAL;

FUNCTION median (num_tab NumTabTyp, n INTEGER)
RETURN REAL IS
BEGIN
-- compute median
END;

BEGIN
median_bonus := median(:bonus, :dimension);
...
END;
END-EXEC;

위의 예제에서 PL/SQL블록에 25 배열요소가 전달되었으며 결과적으로,PL/SQL블록에
오라클 실행을 위해서 보내졌을경우 더욱 적은 호스트 배열이 보내진것이며, 이것은
시간을 절약할 수 있고, 네트웍 부하또한 줄일 수 있다.



출처 - http://younbok.egloos.com/9342721

'Language > Pro*C' 카테고리의 다른 글

[번역] Embedded PL/SQL - 04  (0) 2015.05.20
[번역] Embedded PL/SQL - 03  (0) 2015.05.20
[번역] Embedded PL/SQL - 01  (0) 2015.05.20
[번역] Embedded SQL - 03  (0) 2015.05.20
[번역] Embadded SQL - 02  (0) 2015.05.20
: