SQL> savepoint s1;保存点已创建。SQL> commit;提交完成。SQL> drop table employee_hope;表已删除SQL>rollback to s1;
rollback to s1
*
第 1 行出现错误:
ORA-01086: 从未创建保存点 'S1'
rollback to s1
*
第 1 行出现错误:
ORA-01086: 从未创建保存点 'S1'
第二 你执行了drop的ddl语句, 这个是隐式提交的 。
也会重置检查点
回滚一般是回到事务开始时状态。也可以事先在一个事务中设置一些保留点,然后可以回滚事务到指定的保留点,而保留点之前的工作仍然有效。设置保留点:SAVEPOINT 保留点名字。
回滚到指定保留点:ROALLBACK TO 保留点名字。可以在任何地方设置一个保存点,这样可以将修改回滚到保存点处。
当一个事务很大时,应该将其分割成一系列小的事务,并适当设置保存点。你已经commit;则事务已经结束,那设置的保留点已经不存在了,这很正常啊。
insert 数据a
savepoint s
insert 数据b
select -- a与b都有
rollback to s
select -- 只有a了
1.你commit 把这个事务提交了,就结束了,也释放了保存点;
2.你drop 表属于DDL语句,该类型的语句是隐式提交。就是oracle他自动帮你提交了不能回滚了
----------
23SQL> commit;提交完成。SQL> savepoint a1;保存点已创建。SQL> delete from employee_hope where emp_no='E0083';已删除 1 行。SQL> rollback to a1;回退已完成。SQL> select count(*) from employee_hope; COUNT(*)
----------
23SQL> savepoint a2;保存点已创建。SQL> drop table employee_hope;表已删除。SQL> rollback to a2;
rollback to a2
*
第 1 行出现错误:
ORA-01086: 从未创建保存点 'A2'SQL> commit;提交完成。SQL> savepoint z1;保存点已创建。SQL> truncate table employee_hope;表被截断。SQL> rollback to z1;
rollback to z1
*
第 1 行出现错误:
ORA-01086: 从未创建保存点 'Z1'
事务只有在提交(COMMIT)后,对数据库的更改才可以永久保持。事务以执行更新操作的SQL语句开始,并显式地以ROLLBACK或COMMIT语句结束,但使用DDL语句时,事务处理将隐式地自动结束。
呵呵…………
事务控制语言(TCL)
数据操纵语言(DML)
数据定义语言(DDL)L不就是 language吗??