gpt4 book ai didi

database - 插入触发器以验证唯一约束

转载 作者:搜寻专家 更新时间:2023-10-30 22:01:52 24 4
gpt4 key购买 nike

我有以下触发器,它在 updated 变为 Y 时触发。仅当 my_hist 表中不存在值时,我才想插入旧值。如果存在相同的记录,则不应插入。对于这个最好的方法是创建一个约束来检查 my_hist 表中的唯一性还是在触发器中检查这个条件?如果是这样,我怎么能在触发器中做到这一点?

或者是否可以在trigger中检查my_hist表的唯一约束,使其不会插入重复记录。

CREATE OR REPLACE TRIGGER mytrig
AFTER UPDATE
ON mytab
FOR EACH ROW
WHEN (
new.updated = 'Y'
)
BEGIN
INSERT INTO my_hist
VALUES (
:old.id,
:old.no,
:old.start_date,
:old.end_date,
SYSDATE
);
END mytrig;
/

最佳答案

如果要强制执行唯一性,请使用唯一性约束。这总是比自己编写代码更可取。

您可以检查该行是否已作为您的 INSERT 语句的一部分存在

INSERT INTO my_hist( id, 
no,
start_date,
end_date,
some_other_column )
SELECT :old.id,
:old.no,
:old.start_date,
:old.end_date,
sysdate
FROM dual
WHERE NOT EXISTS( SELECT 1
FROM my_hist
WHERE my_hist.id = :old.id
AND my_hist.no = :old.no
AND my_hist.start_date = :old.start_date
AND my_hist.end_date = :old.end_date );

但是,在多个 session 可能同时插入同一行的多用户环境中,这将行不通。

关于database - 插入触发器以验证唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11003617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com