Большая часть триггера не нужна.
Вы можете достичь своей цели без CASE
и без определения переменной.
CREATE OR REPLACE TRIGGER GFLANCAM_ATUALIZA_DATA_EMISSAO
BEFORE INSERT
ON GFLANCAM
FOR EACH ROW
BEGIN
-- Consider following:
-- IF NVL (:NEW.DOCUMENTO, ' ') <> ' '
IF :NEW.DOCUMENTO <> ' '
THEN
-- Following line may cause ORA-01403: no data found
SELECT dt_inicio INTO :NEW.data FROM ctcontra WHERE cd_contrato = :NEW.documento;
END IF;
END;
/
Несколько замечаний:
Если вы хотите поймать NULL
значений, добавьте NVL
, показанный выше.
Следите за случаем, когда соответствующая запись не найдена в ctcontra
- это условие приведет к ORA-01403: no data found
(что в данном случае может быть именно тем, что вам нужно).
Убедитесь, что ctcontra
имеет только одну запись для каждого значения cd_contrato
, в противном случае вы получите ORA-01422: exact fetch returns more than requested number of rows
.