触发器中如何取消插入操作
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成立时,完成更新并且能取消插入操作
触发器
[解决办法]
抛出一个异常出来.
[解决办法]
这种需求为啥要用插入? 用merge 不行吗?
[解决办法]
....lz要的是取消操作
自行把插入数据删除
[解决办法]
如果代码正确,为什么会重复插入数据呢?想过这个问题吗?
从源头解决问题,而不是解决连带发生的问题。
[解决办法]
楼主这个需求本身有矛盾,不合理啊。。
把原insert语句改成merge,,触发器都可以不用了。。。
[解决办法]
来这里提问的,多数都是要解决问题的。。。。
根源修改代价太大,
[解决办法]
那就在触发器的
update bill set quantity=quantity+:new.quantity
where food_id=:new.food_id and bid=:new.bid;
代码段后面再写个delete语句删除掉重复记录吧。。。
[解决办法]
楼主目前的做法是直接insert,然后用触发器判断是修改还是新增,难道不可以先判断是修改还是新增,然后再决定update还是insert么