환경: Oracle 9i + pro*c 9.xxxx
구조체 변수를 선언하여 fetch를 할 때 한 번에 29개씩 하고자 하는데 아래와 같이 하면 하나의 row만 fetch가 됩니다.
EXEC SQL TYPE asciz IS STRING(1024) REFERENCE;
#define SIZE 29
struct block {
asciz A[SIZE];
ascoz B[SIZE];
} return_block;
EXEC SQL DECLARE C1 CURSOR FOR
SELECT A, B
FROM TEST;
EXEC SQL OPEN C1;
EXEC SQL FETCH C1 INTO :return_block;
위와 같이 하면 말씀드린 대로 단지 하나의 row만 패치가 됩니다. 아래와 같이 커서를 쓰지 않고 쓴 구문에서는 정상적으로 실행이 됩니다.
EXEC SQL
SELECT A, B
INTO :return_block
FROM TEST;
식으로 커서를 쓰지 않고 바로 select.. into 문을 쓰면 한 번에 29개의 데이터가 구조체에 들어가게 됩니다.
두 구문 다 차이는 없어보이며 이화식씨의 [대용량데이터베이스솔루션]에 나온 방식이라 업무를 저렇게 바꾸어 보고 있는데 제대로 fetch가 안되어 난감한 상황에 이르렀습니다. 정상적으로 실행되지 않는 위 예제에서 왜 하나의 row만 패치가 되는 것일까요?