/*
===========================================================================
================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;
/