如何在Firebird中使用For循环?

时间:2011-08-18 12:14:51

标签: sql for-loop firebird

有人可以向我解释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错误,我正在执行alter storage procedure query - 它运行成功,我假设这将进行必要的更改。后来我执行了存储过程,它完美地工作。谢谢大家节省时间:) ..

2 个答案:

答案 0 :(得分:5)

对于,Firebird中的运算符与 For 不同,例如,在Pascal中,它会增加循环变量并执行代码块,直到满足完成值。

在Firebird中对于运算符获取一组记录(执行查询的结果)并循环遍历它们。对于每条记录,将执行一段代码。可选地,记录中某些字段的值可以放入 INTO 部分中列出的局部变量中。这些变量的值可以在代码块中使用。

在您的示例中,查询:

SELECT table1.Column1 from table1 into :Var1

将执行并且对于结果集中的每个记录都将执行operator:

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

对于它变量:Var将包含当前记录的table1.Column1的值。

答案 1 :(得分: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

对于表“one”中的每一行,执行操作符插入。 Tmp包含表“one”中当前行的值。

P.S。对不起我的英文