100개의 로우를 처리하는 것이나 한번에 1,000개의 로우를 처리하는 것은 전체적인 일량으로 볼 때 동일하다.
그러나 연속 작업 측면에서 보면 한 번 호출할 때마다 처리하는 양은 후자가 10배가 많다.
출처 : 이화식(대용량데이터베이스솔루션)
변경방법 => SET ARRAYSIZE 100
SQL처리를 위한 버퍼의 크기는 Default 6,000 byte. 이 버퍼는 출력되는 로우를 담는 버퍼이므오 'SELECT'를 수행시킨 경우에만 해당된다.
변경방법 => 'ROWS=','BINDSIZE=' 옵션을 이용한다.
출처 : 이화식(대용량데이터베이스솔루션)
운반단위 10만큼만 추출하여 프로그램의 메모리 버퍼에 저장하고 동시에 이 값들을 화면에 출력시킨다.
사용자가 화면을 아래로 NEXT SCROLL 을 수행시키면 그 다음 운반단위 만큼을 추출하여 기존의 버퍼에 저장된 내용에 추가하여(Append) 저장하고 화면에 출력한다.
PREVIOUS SCROLL 을 수행시키면 이미 버퍼에 저장되어 있던 레코드들을 다시 화면에 출력한다.
하나의 변수명에 복수개의 데이터로 구성된 집합을 담는다.
데이타 가공은 'DECODE'를 사용한다.
View,Inline View
(1) HOST 변수의 선언과 SQL문에서의 사용
EXEC SQL BEGIN DECLARE SECTION;
char emp_name\[50\]\[20\];
int emp_num\[50\];
float emp_sal\[50\];
EXEC SQL END DECLARE SECTION;
(2) HOST 변수로 추출(SELECT)
EXEC SQL DECLARE sel_cur FOR
SELECT empno,ename,sal
FROM EMP
WHERE empno>7000;
EXEC SQL OPEN sel_cur;
num_ret=0;
end_flag=1;
for(;end_flag>0; )
{ ?? EXEC SQL FETCH sel_cur INTO :emp_name,:emp_number,:salary; ?? ?
if(sqlca.sqlcode==1403) end_flag=0; ??? 더 이상 Fetch 할 로우가 없을때 or 운반단위를 모두 채우지 못했을때 1403 ?? ?
if((sqlca.sqlerrd\[2\]-num_ret)>0)?? FETCH된 로우 수. ?? ?... ?? ? num_ret=sqlca.sqlerrd\[2\]; ?}
EXEC SQL CLOSE sel_cur;
(3) INSERT,UPDATE,DELETE의 다중처리
EXEC SQL FOR :loop_cnt
UPDATE EMP
SET SAL=:salary*1.12
WHERE empno=:emp_number
for(i=0;i<50;i++)
{ ?? strcpy(emp_name\[i\],'...'); ?? emp_number\[i\]=...; ?? salary\[i\]=...; }
EXEC SQL INSERT INTO EMP(ename,empno,sal)
VALUES(:emp_name,:emp_number,:salary);
EXEC SQL INSER INTO EMP(ename,empno,sal)
SELECT :emp_name,:emp_number,:salary
FROM dual
\\
WHERE ... conditions...
EXEC SQL UPDATE EMP
SET SAL = :salary
WHERE EMPNO = :emp_number
EXEC SQL DELETE FROM EMP
WHERE EMPNO = :emp_number;
(4)배열 변수의 참조
(5)기타 툴의 다중처리
SQL_TRACE