我正在尝试创建一个触发器,但我已经知道我无法在我的第一次尝试中设计它,我将在下面显示 . 由于在修改表时从表中进行选择,这将导致“变异表”错误 . 它实际上一次只插入一条记录时不会导致此错误,但是当我一次插入多条记录时,它确实没有 .
触发器的目的是计算表中客户等于要插入的客户的记录数,并将新的order_num值设置为count 1.我还有一个由触发器设置的公钥值从序列中抽取 . 一旦我删除了触发器的order_num部分和相关的SELECT,这部分就可以了 . 我怎样才能实现我想在这里做的事情?提前致谢 .
CREATE OR REPLACE TRIGGER t_trg
BEFORE INSERT ON t
FOR EACH ROW
DECLARE
rec_count NUMBER(2,0);
BEGIN
SELECT COUNT(*) INTO rec_count
FROM t
WHERE customer_id = :NEW.customer_id;
:NEW.order_num:= rec_count+1;
:NEW.order_pk_id:= table_seq.NEXTVAL;
END;
1 回答
两个触发器和临时表方法可以为您提供解决方案,防止变异表错误 . 然而,性能很可能会受到影响 .