[번역] 호스트배열 (Host Arrays) - 01
Language/Pro*C 2015. 5. 20. 17:16목 차
▣ 왜 배열을 사용하는가?
▣ 호스트 배열의 선언
▣ SQL문에서의 배열사용
▣ 배열로 Select하기
▣ 배열과 Insert하기
▣ 배열과 Update하기
▣ 배열과 Delete하기
▣ FOR절 사용
▣ WHERE절 사용
▣ 배열 구조체
▣ Mimicking CURRENT OF
▣ sqlca.sqlerrd[2] 사용
1) 왜 배열을 사용하는가?
배열은 프로그래밍하는 시간을 줄이며, 성능 향상을 시킬수 있다. 오라클과의 통신
과부하도 줄일수 있다. 예를 들어, 300명의 사원정보를 입력해야한다고 가정할때
배열이 없다면, 각사원의 정보를 insert해야하지만 배열을 사용하여 1번의 insert
문을 사용해서 입력할 수 있다.
2) 호스트 배열의 선언
아래의 예제는 배열을 선언한 예이다.
char emp_name[50][10];
int emp_number[50];
float salary[50];
VARCHAR형의 배열도 선언이 가능하다.
VARCHAR v_array[10][30];
2-1) 제한사항
object형에대한것을 제외하고, 호스트배열의 포인터를 선언 할수는 없다.
문자형배열을 제외하고, 1차원배열만을 지원한다.
아래의 예제는 유효하지 않은 선언이다.
int hi_lo_scores[25][25]; /* not allowed */
2-2) 배열의 최대크기
배열의 최대크기는 32K정도이며 이는 시스템에 따라서, 운영체제에 따라서 달라
질 수 있다.최대크기를 넘었을경우 "parameter out of range"라는 런타임에러가
발생하게 된다.
3) SQL문에서의 배열사용
SQL문에서 배열은 입력변수,출력변수로서 사용할 수 있다.
3-1) 호스트배열 참조
아래의 예제에서 25개행이 입력된다.
int emp_number[50];
char emp_name[50][10];
int dept_number[25];
/* Populate host arrays here. */
EXEC SQL INSERT INTO emp (empno, ename, deptno)
VALUES (:emp_number, :emp_name, :dept_number);
반복문을 사용해서 아래와 같이 입력하는 것도 가능한다.
for (i = 0; i < 50; i += 5)
EXEC SQL INSERT INTO emp (empno, deptno)
VALUES (:emp_number[i], :dept_number[i]);
그러나, 입력해야할 데이터가 더 많을경우 이것에 대한 처리는 할 수가 없게된다.
오라클은 호스배열수가 n개라면 n번 실행해야할 문장으로 다룬다.
3-2) 지시자 배열의 사용
지시자배열은 입력호스트배열에 NULL을 할당하기위해서 지시자변수를 사용하며,
출력호스트배열에 NULL을 감지하거나, 값이 짤려졌는지를 확인하기위해서 사용한다.
아래의 예제는 지시자배열과 함께 INSERT하는 방법을 보여주고 있다.
int emp_number[50];
int dept_number[50];
float commission[50];
short comm_ind[50]; /* indicator array */
/* Populate the host and indicator arrays. To insert a null
into the comm column, assign -1 to the appropriate
element in the indicator array. */
EXEC SQL INSERT INTO emp (empno, deptno, comm)
VALUES (:emp_number, :dept_number,
:commission INDICATOR :comm_ind);
3-3)오라클 제한 사항
VALUES, SET, INTO, 혹은 WHERE 절에서는 호스트 배열을 사용할 수 없다.
UPDATE 혹은DELETE 문의 CURRENT OF과 함께 호스트배열은 사용할 수 없다.
배열은 프로그래밍하는 시간을 줄이며, 성능 향상을 시킬수 있다. 오라클과의 통신
과부하도 줄일수 있다. 예를 들어, 300명의 사원정보를 입력해야한다고 가정할때
배열이 없다면, 각사원의 정보를 insert해야하지만 배열을 사용하여 1번의 insert
문을 사용해서 입력할 수 있다.
2) 호스트 배열의 선언
아래의 예제는 배열을 선언한 예이다.
char emp_name[50][10];
int emp_number[50];
float salary[50];
VARCHAR형의 배열도 선언이 가능하다.
VARCHAR v_array[10][30];
2-1) 제한사항
object형에대한것을 제외하고, 호스트배열의 포인터를 선언 할수는 없다.
문자형배열을 제외하고, 1차원배열만을 지원한다.
아래의 예제는 유효하지 않은 선언이다.
int hi_lo_scores[25][25]; /* not allowed */
2-2) 배열의 최대크기
배열의 최대크기는 32K정도이며 이는 시스템에 따라서, 운영체제에 따라서 달라
질 수 있다.최대크기를 넘었을경우 "parameter out of range"라는 런타임에러가
발생하게 된다.
3) SQL문에서의 배열사용
SQL문에서 배열은 입력변수,출력변수로서 사용할 수 있다.
3-1) 호스트배열 참조
아래의 예제에서 25개행이 입력된다.
int emp_number[50];
char emp_name[50][10];
int dept_number[25];
/* Populate host arrays here. */
EXEC SQL INSERT INTO emp (empno, ename, deptno)
VALUES (:emp_number, :emp_name, :dept_number);
반복문을 사용해서 아래와 같이 입력하는 것도 가능한다.
for (i = 0; i < 50; i += 5)
EXEC SQL INSERT INTO emp (empno, deptno)
VALUES (:emp_number[i], :dept_number[i]);
그러나, 입력해야할 데이터가 더 많을경우 이것에 대한 처리는 할 수가 없게된다.
오라클은 호스배열수가 n개라면 n번 실행해야할 문장으로 다룬다.
3-2) 지시자 배열의 사용
지시자배열은 입력호스트배열에 NULL을 할당하기위해서 지시자변수를 사용하며,
출력호스트배열에 NULL을 감지하거나, 값이 짤려졌는지를 확인하기위해서 사용한다.
아래의 예제는 지시자배열과 함께 INSERT하는 방법을 보여주고 있다.
int emp_number[50];
int dept_number[50];
float commission[50];
short comm_ind[50]; /* indicator array */
/* Populate the host and indicator arrays. To insert a null
into the comm column, assign -1 to the appropriate
element in the indicator array. */
EXEC SQL INSERT INTO emp (empno, deptno, comm)
VALUES (:emp_number, :dept_number,
:commission INDICATOR :comm_ind);
3-3)오라클 제한 사항
VALUES, SET, INTO, 혹은 WHERE 절에서는 호스트 배열을 사용할 수 없다.
UPDATE 혹은DELETE 문의 CURRENT OF과 함께 호스트배열은 사용할 수 없다.
출처 - http://younbok.egloos.com/9342718
'Language > Pro*C' 카테고리의 다른 글
[번역] 호스트배열 (Host Arrays) - 03 (0) | 2015.05.20 |
---|---|
[번역] 호스트배열 (Host Arrays) - 02 (0) | 2015.05.20 |
[번역] Embedded PL/SQL - 04 (0) | 2015.05.20 |
[번역] Embedded PL/SQL - 03 (0) | 2015.05.20 |
[번역] Embedded PL/SQL - 02 (0) | 2015.05.20 |