【发布时间】: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