Oracle 回滚(rollback)详解

1、概念

在 Oracle 中,rollback 用法与 commit 相反,是用来 撤销 当前事务或有问题的事务。

1.1 语法

ROLLBACK [WORK] [TO [SAVEPOINT] savepoint_name | FORCE 'string'};
例如:

  • work - 可选。隐式关键字,可写可不写。
  • to savepoint savepoint_name - 可选。rollback 语句撤销当前会话的所有更改,直到由 savepoint_name 指定的保存点。如果省略该子句,则所有更改都将被撤销。
  • force 'string - 可选'。用于 强制回滚 可能已损坏或有问题的事务。使用此子句,可以将单引号中的 事务id 指定为 字符串。可以在 系统视图 中找到名为 dba_2pc_pengdingv$corrupt_xid_list 的事务标识(无法将有问题的事务回滚到保存点。)

1.1 数据准备

DROP TABLE stu; -- if exists

CREATE TABLE stu (
  s_id NUMBER,
  s_xm VARCHAR2(30)
);

ALTER TABLE stu ADD CONSTRAINTS pk_stu_id PRIMARY KEY(s_id);

2、savepoint

回滚到 最近 的 point

DECLARE
   
BEGIN
   INSERT INTO stu(s_id, s_xm) VALUES(1, '小游子');
   SAVEPOINT ps1;
   
   INSERT INTO stu(s_id, s_xm) VALUES(2, '小优子');
   SAVEPOINT ps2; -- 若也是 ps1,则回滚至此处(最近)
   
   INSERT INTO stu(s_id, s_xm) VALUES(2, '小优子');
   
   COMMIT;
EXCEPTION 
  WHEN OTHERS THEN
     ROLLBACK TO ps1;
     dbms_output.put_line(SQLCODE ||' : '||SQLERRM);
     dbms_output.put_line(dbms_utility.format_error_backtrace);
END;

运行结果:
在这里插入图片描述

发布了43 篇原创文章 · 获赞 32 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_34745941/article/details/86635712