在plsql块中,如果任何语句在DML中出错,所有语句都将回滚?
在plsql块中,如果任何语句在DML中出错而不是自身出错,则所有语句都将回滚。 通过自动提交,单个sql语句形成一个事务,并在完成时提交/回滚。块形成语句的聚合。如果某个块的某个语句失败,则之前(块内)的任何状态仍已执行(并提交)在plsql块中,如果任何语句在DML中出错,所有语句都将回滚?,plsql,Plsql,在plsql块中,如果任何语句在DML中出错而不是自身出错,则所有语句都将回滚。 通过自动提交,单个sql语句形成一个事务,并在完成时提交/回滚。块形成语句的聚合。如果某个块的某个语句失败,则之前(块内)的任何状态仍已执行(并提交) 如果希望一组语句具有事务性,则需要使用“BEGIN[TRANSACTION]…COMMIT/ROLLBACK”,并根据需要进行适当的错误处理 否。当出现异常或错误时,您有权回滚任何特定的语句集。你可以用 SAVEPOINT savepoint_name; ROLLB
如果希望一组语句具有事务性,则需要使用“BEGIN[TRANSACTION]…COMMIT/ROLLBACK”,并根据需要进行适当的错误处理 否。当出现异常或错误时,您有权回滚任何特定的语句集。你可以用
SAVEPOINT savepoint_name;
ROLLBACK TO savepoint_name;
在要回滚的块之前创建一个保存点
<代码>保存点命名并标记事务处理中的当前点。保存点允许回滚事务的一部分,而不是整个事务。每个会话的活动保存点数量是无限的
例如:
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;