2010-07-08 66 views
0

您好我一直在嘗試在c中使用嵌入式sql的遊標,但我似乎無法讓它停止讀取我表中的最後一行。該表稱爲具有兩個屬性pubid和title的發佈。我只想讓我的光標遍歷並顯示pubid。 這是我有:爲什麼我的遊標無限循環在最後一行

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 2010-07-08 03:20:57

+0

它曾經在類似的事情上工作過多年。但是你是否在#4行中缺少'SQL'和終止';'? – vpit3833 2010-07-08 03:29:05

+0

啊,我很壞,我很快就把它從頭頂打出來,沒有注意到。但問題仍然存在 – Dave 2010-07-08 03:35:07

回答

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

你的方式其實是我的第一次嘗試,但由於某種原因,編譯器會給我這個錯誤:標籤'close_c1'使用但未定義,所以我決定去這樣 – Dave 2010-07-08 04:28:54

+0

不能拿出任何理由爲什麼會出現該錯誤。標籤是否在與從中調用相同的函數中定義?在for循環或while循環的塊之外定義標籤是可以的。 – vpit3833 2010-07-08 05:05:57

+0

是的標籤是在相同的功能 – Dave 2010-07-08 14:47:35