一个关于oralce存储过程的问题,增长见识!请帮忙看下!
现在有这么个存储过程如下:
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的方式就会是正确的结果??
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的方式就会是正确的结果??
...全文
相关推荐
用oralce发送邮件的存储过程
一个用oralce存储过程发送邮件的小例子
Oracle ADUMP文件异常增长问题分析与解决方案
b. 异常的数据库活动:如果数据库出现异常的活动,如频繁的长时间查询、大量的写操作等,ADUMP文件可能会记录大量的相关信息,导致文件增长过快。a. 定期清理ADUMP文件:定期检查和清理ADUMP文件,删除过期的或不必要的跟踪信息。c. 错误的日志记录配置:如果ADUMP文件的日志记录配置不正确,可能会导致文件记录了不必要的信息,进而引起文件异常增长。a. 设置错误的跟踪级别:当数据库的跟踪级别设置得过高时,ADUMP文件会记录大量的跟踪信息,从而导致文件异常增长。
关于Navicat Premium 12安装 以及连接Oralce时报:Oracle library is not loaded! 的问题-附件资源
关于Navicat Premium 12安装 以及连接Oralce时报:Oracle library is not loaded! 的问题-附件资源
Oralce PLSQL存储过程之游标实践!
存储过程实践!
oralce 数据库 DBA 实战 运维经验 PLSQL 存储过程编程开发【视频加文档】
oralce 数据库 DBA 实战 运维经验 PLSQL 存储过程编程开发【视频加文档】,运维笔记,资料集合,经验分享。


基础和管理
