同学们,我是Firebird的新人。我试图在游标循环中调用过程(p_procedure
)并将结果插入表(tmp_port
)。如何使用Firebird中的光标将行插入表中?
execute block
as
declare contr integer;
declare IN$DT date;
declare cur_list_of_cont cursor for (select first 100 contracts.doc from TABLE_1);
begin
delete from tmp_port;
IN$DT = getdate()-2;
open cur_list_of_cont;
while (ROW_COUNT > 0) do
begin
fetch cur_list_of_cont into contr;
insert into tmp_port (
DT,
....)
select
:IN$DT as DT,
...
from p_procedure (0, :contr , :IN$DT);
if (ROW_COUNT = 0) then leave;
suspend;
end
close cur_list_of_cont;
end;
问题是,只有单一的,从cur_list_of_cont处理的fisrt行。 为什么其他99行不被处理?
UPDATE
火鸟服务器版本为2.5
UPDATE
在这个实现正常工作:
begin
IN$DT = getdate()-2;
FOR select first 100 contracts.doc from TABLE_1
INTO :contr
DO
BEGIN
insert into tmp_port (
DT,
....)
select
:IN$DT as DT,
...
from p_procedure (0, :contr , :IN$DT);
END
SUSPEND;
end;
这将是更好的,如果第一个例子工程太。怎么做?
您是否检查过“p_procedure”是否为游标中的每条记录返回记录? IOW如果'p_procedure'为第二行返回空结果集,则不会将任何内容插入到tmp_port中,因此ROW_COUNT将为零并且循环将被打破。 – ain
@ain谢谢ypur想法。游标'cur_list_of_cont'返回两个contracts.doc(1999和2000)。我用这两个contract.doc调用'p_procedure'并返回结果。 – May12