【发布时间】:2013-08-24 20:10:06
【问题描述】:
我正在开发一个项目,它执行以下操作:
- 截断临时表 T1。
- 在临时表 T1 中插入几千行。
- 执行一个包含一些提交语句的过程。
- 将表 T1 中的行插入其他相同的表(相对于结构)T2。
- 再执行 2 个带有 commit 语句的过程。
对我来说,以上 5 个步骤构成了一笔交易。所以要么全部完成,要么都不做。
现在即使我执行 conn.rollback 如果发生一些错误,也很少有更改反映到数据库中。
程序中的commit语句是原因吗?截断表是否隐式提交到数据库?
如果是?有什么可能的解决方案?
提前致谢!!!
P.N. : 数据库在 oracle 中,我对 PL/SQL 了解较少
【问题讨论】:
-
如果您从另一个客户端调用过程,调用客户端应该有提交或回滚,而不是存储过程,因此您将拥有对事务的绝对控制权。
-
所以我必须从我的程序中删除提交语句。我会这样做的
-
截断语句怎么样。那些是DDL。我认为即使我不承诺,他们也会承诺。如果我错了,请纠正我!
-
是的
TRUNCATE通过提交所有以前的事务来进行提交。 -
如果您想要事务处理,请使用 DELETE 而不是 TRUNCATE。
标签: oracle stored-procedures jdbc plsql