+ -
当前位置:首页 → 问答吧 → 请教oracle存储过程,如何记录错误发生所在行?如何记录某语句更新了多少行?

请教oracle存储过程,如何记录错误发生所在行?如何记录某语句更新了多少行?

时间:2011-12-10

来源:互联网

我有个oracle存储过程,是要放在UNIX服务器上用crontab脚本定时跑,因为数据量大,UPDATE操作和INSERT操作都比较多,执行时间很长,很容易出现一线异常错误导致存储过程只执行了部分,后面的语句因为错误而没有执行。用sqlcode和sqlerrm又都只记录了错误原因,没法定位是哪个SQL的问题,请问有没办法在错误发生的时候,知道错误是发生在哪一行?
  另外,在存储过程中,某个insert或者update操作执行完毕以后,有没有办法记录下这个语句插入或者更新了多少行?这个语句执行花费了多长时间?

作者: chuyuan   发布时间: 2011-12-10

1. 可以采用异常处理,在程序出现异常时,跳转到异常处理部分,在那里获取已经执行的行数。
2. 使用系统预定义光标SQL%ROWCOUNT:获得的值为刚执行完的一条SQL语句处理的记录数目。
3. 获得SQL语句执行时所用的时间,在SQL*Plus中很容易得到,通过set time on;设置,而后执行sql语句就会显示所耗费的时间;在PL/SQL中没有相应的方法,不过可以变通一下,在sql语句执行之前向一个临时表插入系统时间,在语句执行结束后,再向临时表插入一个系统的执行时间。最后输出一下这2个时间的差,即可获得执行时间。

作者: LuiseRADL   发布时间: 2011-12-11