【问题标题】:ROLLBACK ORACLE does not work回滚 ORACLE 不起作用
【发布时间】:2014-07-16 15:40:36
【问题描述】:

我有一个非常简约的脚本,它不起作用。

SET TRANSACTION NAME 'anyname';
DELETE FROM V_RECHNUNG WHERE recno=207;
INSERT INTO V_RECHNUNG (recno) VALUES (207);
ROLLBACK;
SELECT * FROM V_RECHNUNG ORDER BY RECNO DESC;

我不明白为什么 select 语句会得到一个带有 recno 207 的条目。 在我看来,recno 207 的条目根本不应该存在。

重要提示:我在运行此脚本之前检查了 recno 207 不存在。

是否有任何禁用事务的 Oracle 服务器配置?

【问题讨论】:

  • 你用什么工具来运行这个脚本?您是否有机会将该工具配置为自动提交它发出的语句?
  • 我正在使用原始 php 脚本以及 php adminer 来测试语句。
  • 那么问题几乎肯定出在您的 PHP 脚本中。如果您在普通 SQL*Plus 客户端中运行此脚本,您的回滚将恢复 DELETEINSERT。很可能,您的 PHP 脚本正在自动提交模式下运行。
  • 您在使用 OCI 吗?如果你想指定OCI_NO_AUTO_COMMIT
  • 使用匿名块代替自动提交

标签: sql oracle transactions rollback


【解决方案1】:

如果您的表在您进行任何插入或任何删除之前已经准备好用于 recno 207 的条目,那么这将是有意义的 :)

想一想。

你说了以下记录:

第 1 点: 204、205、206、207、208

第 2 点: 您为 207 发出了删除语句,因此,您只剩下 204、205、206、208

第 3 点: 您为 207 发出插入语句,因此,您只剩下 204、205、206、207、208

第 4 点:您发出了回滚,这将带您回到第 1 点。即:您从一开始就有 207 个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2012-07-04
    相关资源
    最近更新 更多