有人可以向我解释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 - 它运行成功,我假设这将进行必要的更改。后来我执行了存储过程,它完美地工作。谢谢大家节省时间:) ..
答案 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。对不起我的英文