【发布时间】:2014-03-26 00:47:41
【问题描述】:
我有两张桌子,分别是 test 和 books。我的任务是创建一个 Oracle 触发器,该触发器将在将测试合并到书籍时避免/防止重复。没有错误,但正在插入重复项
我的桌子:
books: book_id(PK), book_name, author, no_of_copies
test : book_id, book_name, author, no_of_copies, CMT
触发器:
CREATE OR REPLACE TRIGGER tri_books_edit
BEFORE INSERT ON books
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
WHEN ((select count(*) from books where book_name = N.book_name and author = N.Author) > 0)
BEGIN
rollback;
END
**MERGE STAMTEMENT**
Merge the test to books and remove the duplicates of book_name and author
rows from test to books
MERGE INTO books AS b
USING (select book_id, book_name, author, no_of_copies from test where book_id >= 12) AS t
ON b.book_id = t.book_id
WHEN MATCHED THEN
UPDATE SET no_of_copies = b.no_of_copies + t.no_of_copies
WHEN NOT MATCHED THEN
INSERT (book_id, book_name, author, no_of_copies)
VALUES (t.book_id, t.book_name, t.author, t.no_of_copies);
Result :Trigger is not invoking and duplicates are inserting in books table.
【问题讨论】:
-
如果可能,您应该使用唯一索引来防止重复。
-
如果您想合并记录,那么为什么要使用触发器,您可以使用 MERGE 语句来实现此目的。请提供有关您的要求的更多详细信息。
-
当你使用 MERGE 语句时,会出现什么样的错误?您可能需要更新您的问题和标题,否则任何一个问题都将被关闭或被标记。
-
我已经更改了问题和正文。我没有收到任何错误,但正在插入重复项。我想要一个触发器,它在两个表之间发生合并时不允许重复。 EOD,我的目标是看到我的表具有唯一的书名和作者值..
-
@user3454735 检查这个post,看看这是否有用。