【问题标题】:how to make beforeInsert trigger to set specific value in column if other column is null如果其他列为空,如何使 beforeInsert 触发器在列中设置特定值
【发布时间】:2019-06-19 10:11:00
【问题描述】:

我有这张表,我想在插入触发器之前制作它

这将检查新插入的值是否在 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;

但它有语法错误,无法弄清楚

【问题讨论】:

    标签: oracle plsql database-trigger


    【解决方案1】:

    有几个错误 - 在一些绑定变量之前缺少 :NEW,缺少 end if,没有“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 总是一个很好的参考。

    【讨论】:

    • “ELSE IF :new.column_a IS NOT NULL THEN”没用... IF :new.column_a IS NULL THEN :new.column_b := 0; ELSE :new.column_b := 1;如果结束;
    • @BartmanDilaw - 只是试图让它编译。 OP 可以确定他/她需要的逻辑。
    猜你喜欢
    • 2018-09-15
    • 2013-09-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 2019-04-12
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多