SQL - предотвратить срабатывание триггера, если условие выполнено - PullRequest
0 голосов
/ 17 октября 2018

У меня есть следующий триггер

CREATE OR REPLACE TRIGGER MODIFY_EMP_DESC
BEFORE INSERT ON EMP
    FOR EACH ROW
BEGIN
    SELECT 'MR. ' :NEW.NAME || ', Age: ' || :NEW.AGE || '. '|| :NEW.DESC || INTO :NEW.DESC FROM DUAL;
END;
/

По сути, этот триггер срабатывает, когда новая запись добавляется в таблицу EMP, и устанавливает исходную EMP.DESCRIPTION этой новой записи такжесодержит информацию об имени и возрасте 'MR. {NAME}, Age {AGE}. {DESC}'.Теперь я хочу проверить, является ли NAME или AGE NULL.Если один из них есть, то я не даю триггеру форматировать столбец DESC.Это то, что я пытался

CREATE OR REPLACE TRIGGER MODIFY_EMP_DESC
BEFORE INSERT ON EMP
    FOR EACH ROW
BEGIN
    SELECT 'MR. ' :NEW.NAME || ', Age: ' || :NEW.AGE || '. '|| :NEW.DESC || INTO :NEW.DESC FROM DUAL
    WHERE :NEW.NAME IS NOT NULL 
        AND :NEW.AGE IS NOT NULL
END;
/

Но когда я проверял мой триггер

INSERT INTO EMP (ID, DESC) VALUES (123, 'ACCOUNTANT.');

, он просто показал мне ошибку:

ERROR at line 1:
ORA-01403: no data found
ORA-06512: at "MIKE.MODIFY_EMP_DESC", line 2
ORA-04088: error during execution of trigger 'MIKE.MODIFY_EMP_DESC'

Есть ликаким образом я могу достичь этого?Я думал об использовании операторов IF, но не смог найти ничего полезного.

1 Ответ

0 голосов
/ 17 октября 2018

Просто используйте PL / SQL:

CREATE OR REPLACE TRIGGER MODIFY_EMP_DESC
BEFORE INSERT ON EMP
    FOR EACH ROW
BEGIN
    if :NEW.NAME IS NOT NULL
    AND :NEW.AGE IS NOT NULL
    then
        :NEW.DESC :=  'MR. '|| :NEW.NAME || ', Age: ' || :NEW.AGE || '. '|| :NEW.DESC;
    end if;  

END;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...