oracle怎么获取更新前的值 要做一个触发器,记录商品价格变化情况。
item表(商品信息),和记录变化情况的price_changecreateorreplacetriggerupd_priceafterupdateofpriceonit...
item表(商品信息),和记录变化情况的price_change
create or replace trigger upd_price
after update of price on item
for each row
declare
-- local variables here
begin
for rec in(select itemNo,price from item where itemNo = :new.itemNo)
loop
insert into price_change(rec.itemNo,:old.price,:new.price,sysdate())
end loop;
end upd_price; 展开
create or replace trigger upd_price
after update of price on item
for each row
declare
-- local variables here
begin
for rec in(select itemNo,price from item where itemNo = :new.itemNo)
loop
insert into price_change(rec.itemNo,:old.price,:new.price,sysdate())
end loop;
end upd_price; 展开
1个回答
展开全部
我猜你是遇到了表发生变化,触发器不能读的错误,原因是UPDATE和触发器处于同一事务中,此时UPDATE事务未结束,所以SELECT语句报错。解决办法就是去掉这一行!然后在INSERT这行里用:new.itemNo来代替rec.itemNo。另外,你这个是行级触发器,不需要loop(itemNo想必是表item的主键吧,即使用loop,因为where的条件限制,也只会返回一行)。
所以实际你只需要这么写:
create or replace trigger upd_price
after update of price on item
for each row
declare
-- local variables here
begin
insert into price_change(itemNo,oldPrice,newPrice,changeTime) values(:new.itemNo,:old.price,:new.price,sysdate);
end upd_price;
/
所以实际你只需要这么写:
create or replace trigger upd_price
after update of price on item
for each row
declare
-- local variables here
begin
insert into price_change(itemNo,oldPrice,newPrice,changeTime) values(:new.itemNo,:old.price,:new.price,sysdate);
end upd_price;
/
追问
哇~是啊~谢谢啊
可以顺便问一下,在分析oracle问题的时候
一般要考虑哪几方面啊?(虽然我也觉得这问题很泛)
比如这题就会考虑事务这东西`
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询