Внутри хранимки выполняется цикл (выбирается по условию список товаров,
к которым другими хранимками добавляются еще реквизиты):
FOR
execute statement
'select w.Dashcode, w.WareNum, l.Pricecode
from wares w join pricelevel l on (w.Printit = l.Pricecode)
where 1=1 '||where_str
INTO
:Dashcode, :WN, :Pricecode
DO
begin
FOR
select n.Num, g.Price, g.Region_Id
from Get_Wares_Prices(:WN, :Priceout_Curr) g
left join StoreNames n on (g.REGION_ID = n.Pricecolumn_Int)
where g.Price is not null
and (n.Closed=0 or n.Closed is null)
INTO
:Storenum, :Price, :Region_Id
DO
begin
if (:Region_Id <> :Old_Region_Id) then
-- ищем, только если код сменился
select f.PRICENAME, f.Priceid from Pricetypes_Full f /* <<<< */
where f.Priceid = :Region_Id
into :Region_Name, :Old_Region_Id;
--end if
suspend;
end
end
Проблема в том, что если верхний запрос возвращает слишком много
записей, то в конце концов возникает нехватка памяти на вызове хранимки
Pricetypes_Full, и процесс fb_inet_server занимает всю доступную память.
Commit приводит потребление памяти в норму.
Что происходит и как это побороть?