oracle存储过程实例

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 --隐式命令,执行通过isas来实现

  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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值