Oracle:更新后触发器

时间:2015-01-28 18:20:10

标签: sql oracle plsql triggers

我有3张桌子:

Category(CategoryId, Name)
Product(ProductId, Name, Description, CategoryId)
OrderItem(OrderId, OrdinalNumber, ProductId, CategoryId)

我想创建一个AFTER UPDATE触发器,在CategoryId更新ProductId)后更改OrderItem(基于ProductId中的新OrderItem

有人可以帮助解决这个问题吗?

2 个答案:

答案 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)

除非您喜欢数据库死锁,一般性能问题,数据损坏和不可预测的结果,否则不建议使用此类更新。如果您的性能有问题,请检查索引和查询。不要在表中复制列,尤其是当它们是外键的一部分时。我不是教条型,但在这种情况下我不会让步; - )