create or replace trigger dbo.trg_insert_rkd
  before insert on dbo.sj_rkd
  for each row
declare 
num number;
begin
   select count(*) into num from dbo.sj_current_kc 
   where ksdh = :new.ksdh and sjdh = :new.sjdh and sjph = :new.sjph;
   if num>0 then 
      update dbo.sj_current_kc set current_kc = current_kc + :new.sl
       where ksdh = :new.ksdh and sjdh = :new.sjdh and sjph = :new.sjph;
   else
       insert into dbo.sj_current_kc
            (ksdh,sjdh,sjph,current_kc)
       values(:new.ksdh,:new.sjdh,:new.sjph,:new.sl);
   end if
 
end

解决方案 »

  1.   

    try:
    create or replace TRIGGER trg_insert_rkd 
    before insert ON sj_rkd
    for each row
    declare
    v_ksdh char(10) --科室代号
    v_sjdh varchar(30)--试剂编号
    v_sjph varchar(30)--试剂批号
    v_sl   numeric(24,6)--出库数量
    v_num number;
    begin
    v_ksdh := :new.ksdh;
    v_sjdh := :new.sjdh;
    v_sjph := :new.sjph;
    v_sl  := :new.rksl;select count(*) into v_num from sj_current_kc where ksdh=v_ksdh and sjdh = v_sjdh and sjph = v_sjph;
      if v_num>0 then
      update sj_current_kc set current_kc = current_kc + v_sl
           where ksdh = v_ksdh and sjdh = v_sjdh and sjph = v_sjph;
       else
            insert into sj_current_kc
    (ksdh,sjdh,sjph,current_kc)
            values(v_ksdh,v_sjdh,v_sjph,v_sl);
      end if;
    end trg_insert_rkd;
    /
      

  2.   

    create or replace trigger trg_insert_rkd
    after insert on sj_rkd
    for each row
    declare 
    num number;
    begin
       select count(*) into num from sj_current_kc 
       where ksdh = :new.ksdh and sjdh = :new.sjdh and sjph = :new.sjph;
       if num <> 0 then 
          update sj_current_kc 
          set current_kc = current_kc + :new.sl
          where ksdh = :new.ksdh and sjdh = :new.sjdh and sjph = :new.sjph;
       else
           insert into dbo.sj_current_kc(ksdh,sjdh,sjph,current_kc)
           values(:new.ksdh,:new.sjdh,:new.sjph,:new.sl);
       end if
    end;
      

  3.   

    create or replace trigger trg_insert_rkd
    after insert on sj_rkd
    for each row
    declare 
    num number;
    begin
       select count(*) into num from sj_current_kc 
       where ksdh = :new.ksdh and sjdh = :new.sjdh and sjph = :new.sjph;
       if num <> 0 then 
          update sj_current_kc 
          set current_kc = current_kc + :new.sl
          where ksdh = :new.ksdh and sjdh = :new.sjdh and sjph = :new.sjph;
       else
           insert into dbo.sj_current_kc(ksdh,sjdh,sjph,current_kc)
           values(:new.ksdh,:new.sjdh,:new.sjph,:new.sl);
       end if
    end;
    /
      

  4.   

    create or replace trigger dbo.trg_insert_rkd
      after insert on  dbo.sj_rkd 
      for each row
    declare
      -- local variables here
      v_ksdh char(10);
      v_sjdh varchar2(30);
      v_sjph varchar2(30);
      v_sl   number(24,6);
      v_cnt  number;
    begin
      v_ksdh := :new.ksdh
      v_sjdh := :new.sjdh
      v_sjph := :new.sjph
      v_sl   := :new.sl
      select count(*) into v_cnt from dbo.sj_current_kc where ksdh = v_ksdh and sjdh = v_sjdh and sjph = v_sjph;
      
      if v_cnt > 0 then
        update dbo.sj_current_kc set curretn_kc = current_kc + v_sl where ksdh = v_ksdh and sjdh = v_sjdh and sjph = v_sjph;
      else
        insert into dbo.sj_current_kc (ksdh,sjdh,sjph,current_kc) values (v_ksdh,v_sjdh,v_sjph,v_sl); 
      end if
    end dbo.trg_insert_rkd;