解决方案 »

  1.   

    存储过程是计算工资明细的 存储过程已测试 单独调用完全没问题 就是进入触发器就报错
    create OR REPLACE PROCEDURE TotalSalary
    (zg_zgbh in zgxx00.zgbh00%type,totalSalary out number,zcjbSal out number,
    zwSal out number,kySal out number,totalksSal out number)--职工编号,实际工资总和,基本工资,职务工资,科研工资,课时总工资
    is
    zg_zcbh ZGXX00.Zcbh00%type;--职称编号
    zg_zwbh ZGXX00.Zwbh00%TYPE;--职务编号
    zg_sfjx ZGXX00.Sfjx00%type;--是否教学
    zg_sfky ZGXX00.Sfky00%type;--是否科研
    ksNUM number(10);
    ksSal number(10);
    begin
      select Zcbh00,Zwbh00,Sfjx00,Sfky00 into zg_zcbh,zg_zwbh,zg_sfjx,zg_sfky from ZGXX00 where ZGBH00=zg_zgbh;
      select JBGZ00 into zcjbSal from ZCXX00 where ZCBH00=zg_zcbh;
      select ZWGZ00 into zwSal from ZWXX00 where ZWBH00=zg_zwbh;
      if 
        zg_sfjx='是' 
      then 
        select KSS000 into ksNUM from GRJXDJ where ZGBH00=zg_zgbh;
        select MKSJT0 into ksSal from JXJT00 where ZCBH00=zg_zcbh;
      else
        ksNUM:=0;
        ksSal:=0;
      end if;
      if
        zg_sfky='是'
      then
        select MYKYJT into kySal from KYJT00 where ZCBH00=zg_zcbh;
      else
        kySal:=0;
      end if;  
       totalksSal:=ksNUM*ksSal;
       totalSalary :=ksNUM*ksSal+kySal+zwSal+zcjbSal;
      commit;
    end;存储过程代码
      

  2.   

    报错信息不是有提示么?存储过程的第18行,你又访问了触发器作用的表,oracle不允许这样。
    你触发器改成自治事务试试
      

  3.   

    和我前几天遇到的问题有点类似:http://bbs.csdn.net/topics/390741131
    在declare处要创建一个自治事务;
      PRAGMA AUTONOMOUS_TRANSACTION;
    在update是(commit)提交事务应该就可以了。