2011-08-18 170 views
3

有人可以向我解釋Firebird中For循環的語法嗎?如何在Firebird中使用For循環?

這裏是我到目前爲止的代碼:

As 
Declare variable Var1 integer; 
begin 
Insert into table1 
-- Select query to insert some enteries in table 1 - Done successfully. 
FOR SELECT table1.Column1 from table1 into :Var1 
Do 
Begin 
Update tableabc.column1 = (select tablexyz. column1 from tablexyz where tablexyz.ID = :Var1) where tableabc.ID = :Var1 
End 

更新:謝謝你給它一個嘗試,但我不看我寫,並列入答案查詢查詢之間的主要區別。雖然上面的查詢在我的最後運行成功,但是當我看到表中的數據時,沒有更新。

其實我正在做一個v.dumb的錯誤,我正在執行改變存儲過程查詢 - 它運行成功,我假設這將做出必要的更改。後來我執行了存儲過程,並且它工作得很好。感謝所有爲節約您的時間:) ..

回答

5

對於火鳥運營商是不喜歡,比方說,在帕斯卡那裏遞增循環變量,直到完成價值將得到滿足執行的代碼塊。

In Firebird 對於運算符獲取一組記錄(查詢的執行結果)並遍歷它們。對於每個記錄,將執行一段代碼。可以將記錄中某些字段的值放入INTO部分列出的局部變量中。這些變量的值可以在一段代碼中使用。

在您的示例查詢:

SELECT table1.Column1 from table1 into :Var1 

將被執行,並在結果集中的所有記錄將被執行操作:

Update tableabc.column1 = 
    (select tablexyz. column1 from tablexyz where tablexyz.ID = :Var1) 
where tableabc.ID = :Var1 

對於它的變量:VAR將包含表1的值。當前記錄的Column1。

+0

謝謝你這麼好的解釋。 – Rohit

2
create procedure TEST 
as 
declare variable TMP integer; 
begin 
    for select one_f from one into :tmp 
    do 
    begin 
     insert into two (two_f) values (:tmp); 
    end 
    suspend; 
end 

對於表「1」中的每一行執行運算符插入。 Tmp包含來自表「one」的當前行的值。

P.S.對不起,我的英語