触发器中如何取消插入操作

桃芝妖妖 2013-04-12 08:10:25
create or replace
trigger trig_number
before INSERT ON bill
for each row
declare
pragma autonomous_transaction;
sbid NUMBER;
begin
select count(*) into sbid from bill where bid=:new.bid and food_id=:new.food_id;
if sbid<>0 then
update bill set quantity=quantity+:new.quantity
where food_id=:new.food_id and bid=:new.bid;
elsif sbid=0 then
null;
end if;
end;

存在问题:插入数据后,原有数据会更新,但会重复插入一条数据
我想请教的是:如何在条件sbid<>0成立时,完成更新并且能取消插入操作

...全文
1078 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
buryMyLove 2013-05-02
  • 打赏
  • 举报
回复
楼主目前的做法是直接insert,然后用触发器判断是修改还是新增,难道不可以先判断是修改还是新增,然后再决定update还是insert么
洞穿秋水 2013-04-27
  • 打赏
  • 举报
回复
哇哦,那到时候你操作这条数据的时候,你写的语句是insert呢还是update呢
blogzlh 2013-04-26
  • 打赏
  • 举报
回复
好纠结
桃芝妖妖 2013-04-26
  • 打赏
  • 举报
回复
如果原表中有数据了那就是更新,如果没有数据就插入一条新的。我现在是在插入之前作出判断,如果存在该数据就作出修改,现在是可以修改了,但是插入新数据的操作是不管数据存不存在都执行的,我现在想如果更新之后就不再执行插入操作了,有办法没。
u010412956 2013-04-24
  • 打赏
  • 举报
回复
引用 楼主 u010064037 的回复:
create or replace trigger trig_number before INSERT ON bill for each row declare pragma autonomous_transaction; sbid NUMBER; begin select count(*) into sbid from bill where bid=……
那就在触发器的 update bill set quantity=quantity+:new.quantity where food_id=:new.food_id and bid=:new.bid; 代码段后面再写个delete语句删除掉重复记录吧。。。
kilior 2013-04-24
  • 打赏
  • 举报
回复
引用 6 楼 liuyuwen11 的回复:
引用 5 楼 kilior 的回复: 引用 4 楼 liuyuwen11 的回复:加个commit ....lz要的是取消操作 自行把插入数据删除 如果代码正确,为什么会重复插入数据呢?想过这个问题吗? 从源头解决问题,而不是解决连带发生的问题。
来这里提问的,多数都是要解决问题的。。。。 根源修改代价太大,
u010412956 2013-04-23
  • 打赏
  • 举报
回复
楼主这个需求本身有矛盾,不合理啊。。 把原insert语句改成merge,,触发器都可以不用了。。。
wizabone 2013-04-23
  • 打赏
  • 举报
回复
引用 5 楼 kilior 的回复:
引用 4 楼 liuyuwen11 的回复:加个commit ....lz要的是取消操作 自行把插入数据删除
如果代码正确,为什么会重复插入数据呢?想过这个问题吗? 从源头解决问题,而不是解决连带发生的问题。
kilior 2013-04-22
  • 打赏
  • 举报
回复
引用 4 楼 liuyuwen11 的回复:
加个commit
....lz要的是取消操作 自行把插入数据删除
wizabone 2013-04-18
  • 打赏
  • 举报
回复
加个commit
sych888 2013-04-18
  • 打赏
  • 举报
回复
插入干什么?为什么不直接更新呢?
kasin000 2013-04-13
  • 打赏
  • 举报
回复
这种需求为啥要用插入? 用merge 不行吗?
陈字文 2013-04-12
  • 打赏
  • 举报
回复
抛出一个异常出来.

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧