如果发生内部提交,我可以在Oracle中执行哪些操作来保留保存点?

时间:2012-11-06 15:17:43

标签: oracle unit-testing plsql refactoring

背景 我正在做一些Oracle plsql重构;我想要完成的第一个想法是对主要组件进行单元测试。

为此,我使用ruby和gem plsq-spec https://github.com/rsim/ruby-plsql-spec

为了多次执行测试,我在打开数据库连接后使用Oracle Savepoints,并在关闭连接之前回滚到保存点

问题: 有些测试不能执行多次,因为有些程序有内部提交。

如果发生内部提交/回滚,我可以在Oracle中做些什么来保留保存点?

在说明中显示这些信息显然我想要的是不可能的 http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/savepoint_statement.htm

  

简单的回滚或提交会删除所有保存点。当你回滚   保存点后,标记在该保存点之后的任何保存点都将被删除。   您回滚的保存点仍然存在。

所以,唯一的解决方案是?:

  • 修改程序
  • 在执行测试之前擦除所有数据?

TKS

1 个答案:

答案 0 :(得分:3)

闪回功能可以为您提供帮助,因为您可以将数据库或单个表恢复到之前某个时间点的状态。

http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9012.htm