我只有一个连接,它对Oracle数据库的两个不同模式中的对象执行DML。我完成了一个涉及schema A中对象的事务,然后启动第二个事务来处理schema B中的对象。如果在处理第二个事务时发生任何错误,我希望回滚这两个事务的更改。这有可能吗?
发布于 2012-08-17 03:28:32
如果希望同时提交或回滚对两个架构所做的更改,则需要使用单个事务。一旦你提交了第一个事务,如果第二个事务失败了,你就不能回滚它了(当然,你可以使用闪回技术,但是它会使的方式变得更加复杂)。但是,如果您对两个模式上的工作使用单个事务,那么您将获得所需的行为,即所有更改都将自动提交或回滚。
发布于 2012-08-17 04:26:02
设置您的Connection,使其不会自动提交(默认情况下会自动提交),例如:
conn.setAutoCommit(false);然后,您可以针对第一个架构运行DML,并使用相同的连接对象针对第二个架构运行DML。如果某些操作失败,请回滚所有内容,例如:
conn.rollback();否则,如果所有操作都成功,则提交:
conn.commit(); https://stackoverflow.com/questions/11993921
复制相似问题