oracle创建两个表,一个入库单录入的表A,一个是库存表B,A表有字段a、b、c,B表也有字段d、e、f,当A中插入数据时,通过判断B表中是否存在(a==d&&c==f)的记录,存在则B表更新此条记录的e字段为(b+e);如不存在B表也插入数据希望通过触发器来实现此功能

解决方案 »

  1.   

    create or replace trigger tgname
    after insert on A
    for each row
    declare
    v_count number;
    begin
    select count(1) into v_count from B where b.d=:new.a and b.f=:new.c;
    if v_count=0 then --不存在,则插入对应的a,b,c到def
             insert into B(d,e,f) values (:new.a,new:b,:new.c);
    else
              update B set e=e+:new.b where b.d=:new.a and b.f=:new.c;
    end if;
    end; 
    /
      

  2.   

    改进一下,对空值进行处理:
    create or replace trigger tgname
    after insert on A
    for each row
    declare
    v_count number;
    begin
    select count(1) into v_count from B where b.d=:new.a and b.f=:new.c;
    if v_count=0 then --不存在,则插入对应的a,b,c到def
             insert into B(d,e,f) values (:new.a,new:b,:new.c);
    else
              update B set e=nvl(e,0)+nvl(:new.b,0) where b.d=:new.a and b.f=:new.c;
    end if;
    end; 
    /