现在有这么个存储过程如下:   create or replace procedure pr_quickImport(p1 varchar2,p2 varchar2,p3 varchar2,p4 varchar2) is
--快速同步薪资档案人员至考勤中来
begin
    --先删除考勤表中该月那些不存于薪资档案人员库中的人,换句话说就是如果某个人存在于薪资档案人员库中,那么就不删他了.
  delete from xh_data where concat(year,period) = (p1+p2) and pk_psndoc in( select pk_psndoc from bd_psndoc where pk_deptdoc in
        (select distinct power.resource_data_id from sm_power_deptdoc power, sm_user u, sm_user_role urole where u.cuserid = p3 and u.cuserid = urole.cuserid and urole.pk_corp = p4 and urole.pk_role = power.pk_role and power.orgtypecode = 1 and ( power.pk_org = p4 or iscommon_power in ( 'y', 'Y' ) ))
    );  --插入薪资档案人员库中新增加的人
  insert into xh_data(pk_psndoc,year,period)
  select distinct psnid,cyear,cperiod
  from wa_psn
  where istopflag=0
  and dr=0
  and cyear=p1
  and cperiod=p2
  and classid in (select pk_wa_class from wa_waclass where vwaclassname='工资')
  and psnid in (select pk_psndoc from bd_psndoc where psnclscope='0' and pk_deptdoc in (select distinct power.resource_data_id from sm_power_deptdoc power, sm_user u, sm_user_role urole where u.cuserid = p3 and u.cuserid = urole.cuserid and urole.pk_corp = p4 and urole.pk_role = power.pk_role and power.orgtypecode = 1 and ( power.pk_org = p4 or iscommon_power in ( 'y', 'Y' ) )
) ) and psnid not in (select pk_psndoc from xh_data where concat(year,period) = (p1+p2));
end pr_quickImport;  说明:
        该存储过程中的sql语句都是正确取数的(单独使用)
  存储过程功能说明:
        该村粗过程是从一些表里取数然后插入到另一个表中,每次调用都是先按照输入的日期把该日期条件下的数据先从xh_data 中删除,然后再把该日期下的新数据插入到xh_data中。 
   问题:
         我在调用该存储过程时,第一步delete语句没有执行,而是直接执行了 insert语句,这个问题是从前台界面上的显示情况分析出来的,因为在规定的一个日期下没条数据都多了一条重复的。请问各位有谁知道是什么问题,该怎么解决,只用让存储过程按照先delete 后insert的方式就会是正确的结果??

解决方案 »

  1.   

    单独执行delelte那段看看该删的是不是删掉了
      

  2.   

    第一步delete语句没有执行.
    delete from xh_data where concat(year,period) = (p1+p2) and pk_psndoc in( select pk_psndoc from bd_psndoc where pk_deptdoc in 
            (select distinct power.resource_data_id from sm_power_deptdoc power, sm_user u, sm_user_role urole where u.cuserid = p3 and u.cuserid = urole.cuserid and urole.pk_corp = p4 and urole.pk_role = power.pk_role and power.orgtypecode = 1 and ( power.pk_org = p4 or iscommon_power in ( 'y', 'Y' ) )) 
        ); 
    你的where 条件成立了吗?是不是没有数据呢...可以分析一下你的where 语句测试
      

  3.   

    应该是delete时的where条件不成立,楼主可以把 where后的条件写在select count(*) from ..后,看是否有数据