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成立时,完成更新并且能取消插入操作触发器

解决方案 »

  1.   

    这种需求为啥要用插入? 用merge 不行吗? 
      

  2.   

    楼主这个需求本身有矛盾,不合理啊。。
    把原insert语句改成merge,,触发器都可以不用了
      

  3.   

    那就在触发器的
    update bill set quantity=quantity+:new.quantity
    where food_id=:new.food_id and bid=:new.bid;
    代码段后面再写个delete语句删除掉重复记录吧
      

  4.   

    哇哦,那到时候你操作这条数据的时候,你写的语句是insert呢还是update呢
      

  5.   

    楼主目前的做法是直接insert,然后用触发器判断是修改还是新增,难道不可以先判断是修改还是新增,然后再决定update还是insert么