我想知道如何编写一个只在你想要插入的值不存在时激活的触发器,并且我需要在添加之前在另一个表中为它创建一个引用。我一直在为这个当前代码收到错误。
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;
/
有什么建议吗?
答案 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;
/