oracle中有回滾嗎
oracle中有回滾,回滾用于撤銷當前事務或者有問題的事務,利用rollback方法即可完成事務的回滾
語法為
ROLLBACK [隱式關鍵字] [TO [SAVEPOINT] savepoint_name | FORCE 'string'};
一、概念
在 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 existsCREATE TABLE stu ( s_id NUMBER, s_xm VARCHAR2(30));ALTER TABLE stu ADD CONSTRAINTS pk_stu_id PRIMARY KEY(s_id);
二、savepoint
回滾到 最近 的 pointsql
DECLAREBEGIN 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;