Как обработать пустой результат внутренней процедуры

Доброе время суток форумчане,
Есть запрос

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 не работает)

Заранее спасибо за ответ.


Ответы (0 шт):