【发布时间】:2015-11-05 09:25:08
【问题描述】:
根据 Steven Feuerstein 的书
PL/SQL 块发生异常时,Oracle 数据库不回滚
该块中 DML 语句所做的任何更改。您是应用程序逻辑事务的管理者,因此您决定应该发生什么样的行为。
我试试看:
CREATE TABLE DML_Exception (exception_name VARCHAR2(20));
INSERT INTO DML_exception VALUES('CASE_NOT_FOUND');
INSERT INTO DML_exception VALUES('TOO_MANY_ROWS');
我的表中有两行
Select * from DML_Exception
现在我从表中删除了两行并在 PL/SQL 块中引发了异常。
BEGIN
DELETE FROM dml_exception;
raise value_error;
END;
但我的表格仍然包含这两行。我错过了什么?
【问题讨论】:
-
未提交的事务?
-
你用的是什么客户端?也许它会在异常后回滚?
-
作为@Stawros sadid,你忘记了提交
-
关于事务和游标行为的一些基本原则的一个很好的问题。
标签: oracle