create or replace procedure pro_em_pnltran(p_fact_no in char, --in輸入參數
p_pt_date in char,
v_return_text out char) --out輸出參數
/*************************************************************
程序类别 : procedure
程序功能 :人事异动资料到生效日期时数据资料自动生效
程序名称 : pro_em_pnltran
原设计者 : JHQ
撰写日期 : 2007/06/30
**************************************************************/
Is --隐式命令,执行通过is或as来实现
v_pt_date em_pnltran.pt_date%type; --生效日期
v_pnl_no em_pnl.pnl_no%type;
v_up_type em_pnl.up_type%type;
v_position_no_n em_pnltran.position_no_n%type;
v_branch_no_n em_pnltran.branch_no_n%type;
v_s_type_n em_pnltran.s_type_n%type;
v_base_no_n em_pnltran.base_no_n%type;
--从临时表中取要异动的人员资料
cursor cur_tran is
select pnl_no,
up_type,
position_no_n,
branch_no_n,
s_type_n,
base_no_n,
pt_date
from em_tmp_pnltran
where fact_no = p_fact_no
and pt_date <= p_pt_date
and if_trans = 'N';
begin
open cur_tran ; --打开游标
loop --循环执行
fetch cur_tran into v_pnl_no, v_up_type, v_position_no_n, v_branch_no_n,
v_s_type_n,v_base_no_n,v_pt_date ;
exit when cur_tran%notfound ;
if v_up_type = '02' then --职称异动
update em_pnl
set position_no = v_position_no_n ,
up_d = v_pt_date ,
up_type = v_up_type
where fact_no = p_fact_no
and pnl_no = v_pnl_no ;
elsif v_up_type = '04' then --组别异动
update em_pnl
set branch_no = trim(v_branch_no_n) ,
up_d = v_pt_date ,
up_type = v_up_type
where fact_no = p_fact_no
and pnl_no = v_pnl_no ;
elsif v_up_type = '03' then --职称组别异动
update em_pnl
set position_no = v_position_no_n ,
branch_no = trim(v_branch_no_n) ,
up_d = v_pt_date ,
up_type = v_up_type
where fact_no = p_fact_no
and pnl_no = v_pnl_no ;
end if ;
end loop;
close cur_tran ;
update em_tmp_pnltran
set if_trans = 'Y'
where fact_no = p_fact_no and pt_date <= p_pt_date;
if sql%notfound then --隐式游标的属性,返回SQL语句是否执行成功
v_return_text := '信息:资料处理失败!';
else
v_return_text := '信息:资料处理成功,请查询!';
end if;
commit;
exception --异常的处理
when others then
rollback;
end pro_em_pnltran;