PL/SQL block中异常对事物的影响
/*
===========================================================================
================pl/sql block中exception对transaction的影响=================
没有excepion block的pl/sql中,所有sql语句保持一个原子性,如果发生异常,就
整个roll back(异常一直向外抛出,直到终端)
如果增加了excepion捕获,就仅roll back发生异常的sql
===========================================================================
*/
DROP TABLE t PURGE;
CREATE TABLE t (x INT CHECK (x>0));
--没有异常捕获,所以整个roll back
DECLARE
BEGIN
INSERT INTO t(x) VALUES(1);
INSERT INTO t(x) VALUES(-1);
COMMIT;
END;
/
--增加异常捕获之后(在异常处理中commit),前面的sql被提交
DECLARE
BEGIN
INSERT INTO t (x) VALUES (1);
INSERT INTO t (x) VALUES (-1);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
COMMIT;
END;
/
作者:wait4friend
Weibo:@wait4friend
Twitter:@wait4friend
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted on 2012-02-10 15:26 wait4friend 阅读(283) 评论(0) 编辑 收藏 举报