oracle 存储过程小结

 create or replace procedure EK_GET_EMPLOYEE_NUM is

        s_lastDate        DATE;           --最后更新时间              // 定义变量
       s_currDate        DATE;           --当前更新时间

begin
    
  s_currDate := sysdate;
  select s.f_last_date into s_lastDate from EK_LOG_SYNC s where s.f_tbale_name = 'T_Ent_User_Dir';
 
update siebel.S_ORG_EXT_X t set (attrib_16)=(    //这里面及易报错,例如单行子查询返回多行
    select m."F_FactCount" from siebel.S_ORG_EXT o
    left join T_Ent_User_Dir@EK107_EK00 m on o.loc = m."F_Code"
    where m."F_FactCount" is not null and o.row_id = t.row_id
)where exists
(
select 1 from siebel.S_ORG_EXT o
    left join T_Ent_User_Dir@EK107_EK00 m on o.loc = m."F_Code"
    where m."F_FactCount" is not null and o.row_id = t.row_id
);

 update EK_LOG_SYNC s set s.f_last_date = s_currDate where s.f_tbale_name = 'T_Ent_User_Dir';
 INSERT INTO TEST VALUES (sysdate, 'T_Ent_User_Dir同步成功');
commit;   //注意提交事物

exception    //出现异常时执行
  when others then
  DBMS_OUTPUT.put_line('sqlcode : ' ||sqlcode);      //输出出错日志信息
      DBMS_OUTPUT.put_line('sqlerrm : ' ||sqlerrm);
    rollback;
      INSERT INTO TEST VALUES (sysdate, 'T_Ent_User_Dir同步失败');
    commit;
 
end EK_GET_EMPLOYEE_NUM;

昨天肚子太饿了,写到这里没有力气写下去,今天继续哈!

接下来说说存储过程的调用和跟踪, 写了存储过程编译通过后,它并不会执行,而是要放在Job 中去执行,而且还可以设置其执行的时间和频率,截图来看看:



jobs的新建和配置的话,请参考另一篇日志,我已经在网上找到了,这里先不具体说,这里只要知道jobs是用来执行存储过程的就OK!
接下来说说存储过程的跟踪,如果只是可以执行显然不完善,因为如果这样执行出错了你也不知道,所以存储过程中有对成功或者失败的跟踪代码:
INSERT INTO TEST VALUES (sysdate, 'T_Ent_User_Dir同步成功');  //这是成功的代码

如果执行出现异常,在异常中处理跟踪信息:
exception    //出现异常时执行
  when others then
  DBMS_OUTPUT.put_line('sqlcode : ' ||sqlcode);      //输出出错日志信息
      DBMS_OUTPUT.put_line('sqlerrm : ' ||sqlerrm);
    rollback;
       INSERT INTO TEST VALUES (sysdate, 'T_Ent_User_Dir同步失败');
    commit;

这里的在ORACLE中新建了一张test 表用来记录成功或者失败信息, 失败的时间,和同步失败的信息在出错的情况下会被写到这张表中!


这样,只要打开这张表,就可以查看各个存储过程是否正常运行,如果出错就要去排查错误了! 但是这个还需要改进,因为记录的信息太少 了,根本无法知道是因为什么原因出错!所以,接下来要进行这个跟踪信息的改善工作!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值