Обнаружил, что при селекте из процедуры в которй происходит вставка, происходит утечка памяти - процесс забирет больше гигабайта памяти и падает.
CREATE TABLE T (ID INTEGER NOT NULL);
ALTER TABLE T ADD CONSTRAINT PK_T PRIMARY KEY (ID);
SET TERM ^ ;
ALTER PROCEDURE MAIN RETURNS (ID INTEGER)
AS
declare variable I integer = 0;
begin
while (i < 10000000) do begin
select id from SELPROC(:i) into :id;
i = i + 1;
end
suspend;
end^
ALTER PROCEDURE SELPROC (
P_ID INTEGER)
RETURNS (
ID INTEGER)
AS
begin
insert into t values (:P_id);
id = p_id;
suspend;
end^
SET TERM ; ^
select * from MAIN
Версия FB: 2.5 Classic 32bit
Проверял на разных Windows (XP, 7, 2008 R2)
Если селект из SELPROC заменить на
execute procedure SELPROC(:i) returning_values :id;
то память не ест.
Применение FOR SELECT также приводит к утечке.