【问题标题】:Oracle can return time out when another connection already use the same table?当另一个连接已经使用同一个表时,Oracle 可以返回超时吗?
【发布时间】:2019-12-05 13:45:41
【问题描述】:

如果我需要在一个数据库表中运行 DML(插入、更新、删除),首先他验证是否有使用该表的活动 DML。在这个时刻,如果有另一个操作,我的连接等待他完成。 在这种情况下有办法让“超时”吗?不在全局模式下,仅针对特定情况。

--编辑问题的更多规范

不确定是否实际使用了任何类型的锁。但就我而言,Oracle Forms 中有一个旧应用程序和我编写的一个新应用程序。

问题是当用户打开特定记录以更新旧应用程序中的任何字段时,我尝试在我的应用程序中编辑相同的记录,该行被阻止。 所以我的应用程序正在等待解锁。但问题是用户认为应用程序被冻结并杀死他,丢失了更改。 但是,如果另一个 Oracle Forms 应用程序尝试进​​行编辑,则情况并非如此。如果这样做,Oracle Forms 会显示消息“无法保留记录 (2)。继续尝试?”。也许是因为这个旧应用程序使用了任何类型的锁。但我需要在代码中验证这一点。

Obs:数字 2 是尝试更新的次数。

【问题讨论】:

  • 我想您可能正在寻找SELECT ... FOR UPDATE。有关详细信息,请参阅此问题:stackoverflow.com/questions/44865703/…
  • 嗨,是的..也许这只能解决我的一半问题。我在问题中解释得更好。我只需要那个 oracle 返回我的应用程序。
  • Forms 在显示行时会选择更新。您应该在您的应用程序中执行相同的操作,捕获错误并告诉用户。
  • 是的..也许他在内部制作了这个,没有代码。在与应用程序的冲突中,最好等待旧应用程序的停用(1 周)。之后,新应用就没有这个问题了。谢谢大家的回答。

标签: sql oracle oracle11gr2


【解决方案1】:

如果您执行“锁定表 .... 等待”,那么它将等到此表上的任何正在运行的 DML 提交,然后给您锁定。这将使任何人在你等到你释放锁之后再来。查看doc 了解如何使用它。 然后有可能锁定单行(选择更新)。哪个更细化。 话虽这么说,你能解释一下你到底想做什么吗?因为您可能根本不需要这样做。

【讨论】:

  • 嗨。我编辑了帖子并解释了更多关于我的问题。基本上,在应用程序 A 中有关于锁定的响应,而在应用程序 B 中没有。我需要在 B 中得到相同的 A。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
相关资源
最近更新 更多