一个关于oralce存储过程的问题,增长见识!请帮忙看下!
Josir 2009-03-28 02:16:43 现在有这么个存储过程如下:
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的方式就会是正确的结果??