Pro*c 기반 다중처리에서 fetch시 문제 발생 0 2 3,071

by 지호준 [2007.08.02 11:15:57]


환경: 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만 패치가 되는 것일까요?

 

 

by 몽 [2007.08.02 00:00:00]
struct block {
asciz A;
ascoz B;
} return_block[SIZE];

이렇게 바꿔보세요 ^^

by 지호준 [2007.08.02 00:00:00]
답변 감사드립니다. 그렇지만 써주신 방식으로 해도 역시 한 row만 패치가 됩니다. 첫 번째 패치는 무조건 한 row가 되고 for 루프를 돌렸을 때 두번째에서야 정상적으로 배열이 꽉 차게 패치가 되더군요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입