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;
展开
 我来答
ct2k01
2012-12-15 · TA获得超过1570个赞
知道小有建树答主
回答量:1653
采纳率:0%
帮助的人:1107万
展开全部
我猜你是遇到了表发生变化,触发器不能读的错误,原因是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;
/
追问
哇~是啊~谢谢啊
可以顺便问一下,在分析oracle问题的时候
一般要考虑哪几方面啊?(虽然我也觉得这问题很泛)
比如这题就会考虑事务这东西`
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式