SQL-在满足条件时防止触发器触发

SQL-在满足条件时防止触发器触发,sql,oracle,triggers,Sql,Oracle,Triggers,我有下面的触发器 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.DESCR

我有下面的触发器

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}'
。现在我想检查姓名或年龄是否为空。如果其中一个是,那么我将阻止触发器格式化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语句,但我找不到任何有用的语句。

只需使用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;
/