This reference比較DB2和SolidDB過程。
在「清單15. SQLSUCCESS顯示結果集的結尾」一節中,IBM參考顯示了此片段。
EXEC SQL FETCH sel_tab;
WHILE SQLSUCCESS LOOP
EXEC SQL FETCH sel_tab;
END LOOP
它還說
當抓取遊標語句失敗 並沒有找到另一行 檢索,SQLSUCCESS的值 設置爲0,while循環結束。
這幾乎告訴我 while循環甚至不應該,如果是第一次EXEC SQL FETCH
沒有找到一個行中輸入。但是你似乎暗示你的代碼沒有發生這種情況。
稍後,在「表7. solidDB SQLERROR of cursorname語句」中,它顯示了此代碼。 (我的註解。)
"CREATE PROCEDURE tabs_in_schema (schema_nm
VARCHAR) RETURNS (nr_of_rows INTEGER)
BEGIN
DECLARE tab_nm VARCHAR;
EXEC SQL PREPARE sel_tab -- A SELECT statement
SELECT table_name FROM sys_tables
WHERE table_schema = ?;
EXEC SQL PREPARE ins_tab
INSERT INTO my_table (table_name,
schema) VALUES (?,?);
nr_of_rows := 0;
EXEC SQL EXECUTE sel_tab USING -- Executes the SELECT
(schema_nm)INTO (tab_nm);
EXEC SQL FETCH sel_tab; -- EXEC SQL FETCH first row
WHILE SQLSUCCESS LOOP -- Like listing 15
nr_of_rows := nr_of_rows + 1;
EXEC SQL EXECUTE ins_tab USING
(tab_nm, schema_nm);
IF SQLROWCOUNT <> 1 THEN
RETURN SQLERROR OF ins_tab;
END IF;
EXEC SQL FETCH sel_tab; -- FETCH subsequent rows
END LOOP
END";
我想你會喜歡
SELECT COUNT(your_column_name)
FROM your_table
WHERE ...;
COUNT(執行的東西),只要您的查詢有效,將始終返回至少一行。但是這涉及更多的往返數據庫。我認爲你最好堅持試圖取得連勝的習慣,並抓住錯誤。
也許你應該多發一點代碼。 – 2011-05-05 10:05:53