在plsql块中,如果DML中的任何语句通过错误,所有语句都将被回滚?

时间:2016-03-21 06:52:37

标签: plsql

在plsql块中,如果DML中的任何语句通过错误,所有语句都会被支持吗?

2 个答案:

答案 0 :(得分:1)

没有。当出现异常或错误时,您可以回滚任何特定的语句集。你可以使用

SAVEPOINT savepoint_name;
ROLLBACK TO savepoint_name;

在块之前创建一个SAVEPOINT,直到您想要回滚。 SAVEPOINT命名并标记处理事务的当前点。保存点允许您回滚部分事务而不是整个事务。每个会话的活动保存点数量不受限制。

示例:

BEGIN
-- other DML statements
SAVEPOINT do_insert;
   INSERT INTO emp_name VALUES (emp_id, emp_lastname, emp_salary);
EXCEPTION
   WHEN DUP_VAL_ON_INDEX THEN
      ROLLBACK TO do_insert;
      DBMS_OUTPUT.PUT_LINE('Insert has been rolled back');
END;

SAVEPOINT

答案 1 :(得分:0)

不是单独的。 使用单个sql语句上的autocommit形成一个事务,并在完成时提交/回滚。块形成语句的聚合。如果你有一个块的语句失败,那么之前(块内)的任何一个状态仍然被执行(并且已经被提交)。

如果您希望一组语句表现为事务性,则需要使用“BEGIN [TRANSACTION] ... COMMIT / ROLLBACK”并根据您的需要进行适当的错误处理。