【问题标题】:Oracle Trigger after insert with condition插入条件后的Oracle触发器
【发布时间】:2015-08-20 14:01:11
【问题描述】:

我是 PL/SQL 编程的新手,我的任务是创建一个简单的触发器;见下面的代码:

CREATE OR REPLACE TRIGGER  TRG_ACCT_IDW   
AFTER INSERT   
ON ACNTGROUPS  
FOR EACH ROW   
BEGIN   
INSERT INTO IDWORKS_HC   
(ACCOUNT,IDW_CATEGORYNO,GRTYPE)   
VALUES   
(:NEW.ACCOUNT,:NEW.GROUP_,:NEW.TYPE)   
WHERE ACNTGROUPS.TYPE = '1'  
END;

没有 where 子句,一切都很好。 “插入后”触发器可以有条件子句吗?我上面的代码需要重新格式化吗?提前致谢。

【问题讨论】:

    标签: sql oracle triggers conditional-statements insert-into


    【解决方案1】:

    在你的情况下,你需要这样的东西

    CREATE OR REPLACE TRIGGER  TRG_ACCT_IDW   
    AFTER INSERT   
    ON ACNTGROUPS  
    FOR EACH ROW   
    BEGIN   
        IF :NEW.TYPE = '1' then
            INSERT INTO IDWORKS_HC   
            (ACCOUNT,IDW_CATEGORYNO,GRTYPE)   
            VALUES   
            (:NEW.ACCOUNT,:NEW.GROUP_,:NEW.TYPE); 
        END IF;
    END;
    

    【讨论】:

    • 我是否需要添加一个“then”排除项才能正确结束?不断收到'命令未正确结束','遇到符号;,当期待 if'
    • @dw1977 - 在插入语句末尾缺少分号:... , :NEW.TYPE);。还有什么数据类型是你的TYPE 列?如果是数字,则将其与数字 1 进行比较,而不是字符串 '1'
    【解决方案2】:

    使用WHEN condition 将是最干净的解决方案。

    CREATE OR REPLACE TRIGGER TRG_ACCT_IDW
        AFTER INSERT
        ON ACNTGROUPS
        FOR EACH ROW
        WHEN (NEW.TYPE = '1')
    BEGIN   
        INSERT INTO IDWORKS_HC   
        (ACCOUNT,IDW_CATEGORYNO,GRTYPE)   
        VALUES   
        (:NEW.ACCOUNT,:NEW.GROUP_,:NEW.TYPE); 
    END;
    

    不要在WHEN 条件中的相关名称NEWOLDPARENT 之前放置冒号(:)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 2015-06-11
      相关资源
      最近更新 更多