2010-07-08 3 views
0

안녕하세요. C에서 Sql이 내장 된 커서를 사용하려고했지만 테이블의 마지막 행을 읽지 못하게되었습니다. 이 테이블은 pubid와 title의 두 가지 속성이있는 게시라고합니다. 커서를 반복하여 흉부 만 표시하면됩니다.내 커서가 마지막 행에서 무한 루프 반복적 인 이유

EXEC SQL DECLARE C1 CURSOR FOR SELECT pubid FROM publication; 
    EXEC SQL OPEN C1; 
    while(SQLCODE !=100){ 
     EXEC SQL FETCH C1 INTO :pubid; //a host variable that was declared earlier 
     cout<<pubid<<endl; 
    } 

내가 실행, 모든 행을 표시하고 무한 마지막 행을 표시 반복 : 이 내가 가진 것입니다. 나는뿐만 아니라 SQLCODE를 표시하는 시도는 0을 유지, 그래서 커서가이 같은

+3

어떤 DBMS를 사용하고 있습니까? – paxdiablo

+0

몇 년 동안 비슷한 일을했습니다. 하지만 라인 4에서 'SQL'과 종료 ';'가 누락 되었습니까? – vpit3833

+0

아, 내 머리가 아주 빨리 윗부분에서 빠져 나갔다. 그러나 문제는 여전히 지속됩니다. – Dave

답변

1
EXEC SQL DECLARE C1 CURSOR FOR SELECT pubid FROM publication; 
EXEC SQL OPEN C1; 
EXEC SQL WHENEVER NOT FOUND GOTO close_c1; 
while(SQLCODE !=100) { 
    EXEC SQL FETCH C1 INTO :pubid; 
    cout<<pubid<<endl; 
} 
close_c1: 
EXEC SQL CLOSE C1; 

뭔가 일을해야 마지막 행을지나 이동하지 않는 이유를 잘 모르겠어요. 진단을 인쇄하려면 EXEC SQL WHENEVER SQLERROR clean_up_function;을 사용하는 것도 고려하십시오. 나는 참조 here을 찾았다.

+0

길을 실제로 처음 시도했지만 컴파일러가 내게이 오류를 줄 것입니다 : label 'close_c1'이 사용되었지만 정의되지 않았으므로이 방법을 사용하기로 결정했습니다. – Dave

+0

오류가 발생해야하는 이유가있을 수 없습니다 . 레이블이 호출 된 것과 동일한 함수에 레이블이 정의되어 있습니까? for 루프 또는 while 루프의 블록 외부에 레이블을 정의하면 OK입니다. – vpit3833

+0

그런데 레이블이 동일한 함수에 있습니다. – Dave