同學們,我是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