Как обработать пустой результат внутренней процедуры
Доброе время суток форумчане,
Есть запрос
EXECUTE BLOCK RETURNS
…
declare procedure LAST_CERT(ID_EQUIP integer, CALIBR_INT integer) returns(NUMBER_CERT varchar(25), LAST_DATE date, DEVICE_ID_CL integer, COUNT_REC integer) as begin
if (:CALIBR_INT is null) then :CALIBR_INT = -1;
for execute statement
'SELECT ce.NUMBER_CERT, ce.DATE_OUT, ce.DEVICE_ID_CL FROM CERTIFICATE ce left join CERTIFICATE b on ce.DEVICE_ID_CL = b.DEVICE_ID_CL and ce.DATE_OUT < b.DATE_OUT
where b.DEVICE_ID_CL is NULL and ce.DEVICE_ID_CL in ('||ID_EQUIP||')
and (DATEADD(month, '||CALIBR_INT||', ce.DATE_OUT)<current_date)'
on external '…lan.fdb' as user 'SYSDBA' password 'masterkey'
into :NUMBER_CERT, :LAST_DATE, :DEVICE_ID_CL do suspend;
end
begin for select eq.ID, eq.HOST_LABORATORY
, eq.CALIBRATION_INTERVAL
from EQUIPMENT eq where ARCHIVE in (1) and PASSPORT = 1
order by eq.NAME, eq."TYPE", eq.NUMBER, eq.NEMBER_INVENTORY
into :ID_EQUIP, :LAB_ID, :CALIBR_INT
do for
select eq.ID, eq.NAME, ... lc.NUMBER_CERT, lc.LAST_DATE
from EQUIPMENT eq
left join RECIEVE_LAB(:LAB_ID) rl on rl.id = eq.HOST_LABORATORY
left join LAST_CERT(:ID_EQUIP, :CALIBR_INT) lc on eq.ID = lc.DEVICE_ID_CL
where eq.ID = :ID_EQUIP
AND lc.DEVICE_ID_CL is null
into ID, NAME, "TYPE", NUMBER, NEMBER_INVENTORY, PRODUCER, YEAR_BEGIN, CALIBRATION_INTERVAL, ..., LAST_DATE
do
suspend; END
И у меня этот запрос НЕ правильно работает (т.е. просто выдает все записи из EQUIPMENT), если процедура LAST_CERT ничего не выдает (пустой результат, не NULL), т.е. в таблице CERTIFICATE нет строк с ID_EQUIP.
Как мне вывести в таком случае все записи с EQUIPMENT, для которых в CERTIFICATE нет записей. (JOIN не работает)
Заранее спасибо за ответ.