2011-08-18 50 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.对不起,我的英语