如果其他列为空,如何使beforeInsert触发器设置列中的特定值

时间:2019-06-18 23:46:58

标签: oracle plsql database-trigger

我有这张桌子,我想在插入触发器之前制作一张桌子

将检查新插入的值在A列中是否为null,然后将在B列中插入0 +将使用sysdate设置created_On

这是我想要的输出

COLUMN_A COLUMN_B CREATED_BY UPDATE_BY
  null     0       sysdate   sysdate
  12       1       sysdate   sysdate

这是我的触发器

CREATE OR REPLACE TRIGGER SCH.TABLEA_TRG BEFORE 
 INSERT or update
 ON SCH.TABLEA REFERENCING OLD AS old NEW AS new
FOR EACH ROW
begin
if inserting then
:NEW.CREATED_ON := sysdate ;
:NEW.UPDATED_ON := sysdate ;
if :COLUMN_A  is null
 then set :new.COLUMN_B 0
else  :COLUMN_A  is not null
then set :new.COLUMN_B 1 
elsif updating then
:NEW.UPDATED_ON := sysdate ;
end if;

end;

但它存在语法错误,无法弄清

1 个答案:

答案 0 :(得分:4)

有几个错误-在某些绑定变量之前缺少:NEW,如果没有“ set”命令,则缺少结尾,列名不正确。这似乎可以编译。

CREATE OR REPLACE TRIGGER tablea_trg BEFORE
    INSERT OR UPDATE ON tablea
    REFERENCING
            OLD AS old
            NEW AS new
    FOR EACH ROW
BEGIN
    IF inserting THEN
        :new.created_on := SYSDATE;
        :new.updated_on := SYSDATE;
        IF :new.column_a IS NULL THEN
            :new.column_b := 0;
        ELSE
            IF :new.column_a IS NOT NULL THEN
                :new.column_b := 1;
            END IF;
        END IF;

    ELSIF updating THEN
        :new.updated_on := SYSDATE;
    END IF;
END;

无论如何,Oracle Help总是一个很好的参考。