如何在表中不存在值时激活SQL触发器?

时间:2016-02-28 01:56:32

标签: sql oracle triggers

我想知道如何编写一个只在你想要插入的值不存在时激活的触发器,并且我需要在添加之前在另一个表中为它创建一个引用。我一直在为这个当前代码收到错误。

CREATE OR REPLACE TRIGGER CreateConversation
    BEFORE INSERT ON Messages
    FOR EACH ROW
    WHEN ( NOT EXISTS (select convID FROM Conversation where new.convID = convID ))
    BEGIN
        INSERT INTO Conversation (convID, msgID) VALUES(:new.convID, :new.msgID);
    END;
/

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您的数据模型似乎有点奇怪。但是,如果要插入CONVERSATION的行是唯一的,那么一种简单的方法就是每次都尝试插入。如果该值已存在,则会引发dup_val_on_index异常,您可以忽略该异常。

CREATE OR REPLACE TRIGGER CreateConversation
    BEFORE INSERT ON Messages
    FOR EACH ROW
    BEGIN
        INSERT INTO Conversation (convID, msgID) VALUES(:new.convID, :new.msgID);
    EXCEPTION
      WHEN dup_val_on_index THEN
        NULL;
    END;
/