2013-04-17 124 views
1

使用HSQL 2.2.5我需要不寒而慄在存儲過程中每次處理一行,所以我認爲「Iterated FOR」語句可能對我有用。不幸的是,我似乎無法使其工作。它應該看起來像這樣:HSQL迭代FOR語句不工作

FOR SELECT somestuff FROM sometable DO 一些隨機SQL語句 END FOR;

這留下了一些語法,但現在已經足夠接近了。

問題似乎是循環內部的語句從不執行。我已經驗證了我的SELECT語句確實返回了一些內容。

讓我們來具體一點。當我執行這個存儲過程:

CREATE PROCEDURE b() 
MODIFIES SQL DATA 
BEGIN ATOMIC 
    DECLARE count_var INTEGER; 
    SET count_var = 0; 
    WHILE count_var < 10 DO 
     INSERT INTO TTP2 VALUES(count_var); 
     SET count_var = count_var + 1; 
    END WHILE; 
END; 

我到9獲得插入到表TTP2 10行,具有值0(TTP2具有定義類型INTEGER的,只是一列。)

但是,當我替代WHILE的FOR語句如下:

CREATE PROCEDURE c() 
MODIFIES SQL DATA 
BEGIN ATOMIC 
    DECLARE count_var INTEGER; 
    SET count_var = 0; 
    FOR SELECT id FROM ttp_by_session FETCH 10 ROWS ONLY DO 
     INSERT INTO TTP2 VALUES(count_var); 
     SET count_var = count_var + 1; 
    END FOR; 
END; 

我什麼也沒有插入到TTP2中。 (我已經驗證了SELECT語句返回10行,一列整數。)

當我離開FETCH子句關閉時,仍然沒有結果。 ttp_by_session是一個視圖,但同樣的事情發生在一個裸表上。

我在做什麼錯?

感謝您的幫助。

回答

0

這適用於最新版本的HSQLDB。試用HSQLDB網站上的2.3.0候選版快照。

當FOR語句最初在兩年前添加時,它的功能有限。該功能在更高版本中得到擴展。

+0

謝謝弗雷德。我會給你一個鏡頭,讓你知道它是如何工作的。 –

+0

我下載了2.2.9(想要一個穩定版本)。它像廣告一樣工作。 :-)謝謝@fredt! –