文章目录
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_pengding
、v$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;
运行结果: