oracle – 当用户取消程序ORA-01013时出现异常
|
我们有一个处理数据库中大量记录的过程.现在有时如果程序花费的时间过长,则用户手动取消该程序,从而抛出ORA-01013 EXCEPTION.但是,我们仍然想知道在取消程序之前处理了多少记录.
知道如何获取在取消程序之前处理的记录的计数?每次提交时我都可以尝试增加记录但是想知道是否有更好的方法来实现这一点 解决方法您可以在 autonomous transaction中记录进度.即,通过AT将处理后的行记录在单独的事务(具有自己的提交)中的日志表中,例如: CREATE OR REPLACE
PROCEDURE log_progress (
p_id IN NUMBER,p_data IN VARCHAR2
)
AS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO log_table
(
id,logging_data
)
VALUES
(
p_id,p_data
);
--
COMMIT;
EXCEPTION
WHEN others
THEN
-- Log the error here
...
-- Re-raise if needed
RAISE;
END;
如果进程被取消,那么您可以查询AT记录的数据,并查找已处理的行数,因为日志表中的记录插入不会被“主”事务回滚. 另一种方法是使用UTL_FILE包写入日志文件,然后在取消事务时读取文件的内容. 顺便说一句,您可以将(几乎所有)您想要的代码放入异常部分,如果引发该异常,它将被执行.必须有另一个原因导致您的代码未被运行或被导致异常引发的事务回滚. http://www.exforsys.com/tutorials/oracle-11g/oracle-11g-exception-handling.html 希望能帮助到你… (编辑:清远站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

