我有3张桌子:
Category(CategoryId, Name)
Product(ProductId, Name, Description, CategoryId)
OrderItem(OrderId, OrdinalNumber, ProductId, CategoryId)
我想创建一个AFTER UPDATE
触发器,在CategoryId
更新ProductId)
后更改OrderItem
(基于ProductId
中的新OrderItem
有人可以帮助解决这个问题吗?
答案 0 :(得分:0)
在订单行中复制类别ID并不是您通常想要做的事情,但是如果你设置了它,则需要一个'before'触发器,而不是'after'触发器 - 因为你需要更改正在更新的行中的值:
create or replace trigger orderitem_cat_trig
before insert or update on orderitem
for each row
begin
select categoryid
into :new.categoryid
from product
where productid = :new.productid;
end;
/
我已经根据你想要为新订单项设置值的假设进行了插入和更新。
答案 1 :(得分:0)
除非您喜欢数据库死锁,一般性能问题,数据损坏和不可预测的结果,否则不建议使用此类更新。如果您的性能有问题,请检查索引和查询。不要在表中复制列,尤其是当它们是外键的一部分时。我不是教条型,但在这种情况下我不会让步; - )