plsql批处理被表单屏幕阻止

Posted

技术标签:

【中文标题】plsql批处理被表单屏幕阻止【英文标题】:plsql batch blocked by forms screen 【发布时间】:2013-07-29 02:29:31 【问题描述】:

我有一个 Oracle Forms 6i 应用程序和一个 plsql 批处理,并且两者都在对同一个表进行更新。在 Forms 应用程序的表单中,有些字段直接映射到表列。每当访问表的表单打开时,plsql 批处理就会被阻止。如何创建表单以使其不会阻止任何其他数据库会话。有没有办法加载/创建表单的实例,这样它就不会在表上持有任何锁?

【问题讨论】:

Locking Mode 属性是否设置为 delayed 【参考方案1】:

您可以尝试以下两种可能性之一:

1) 对于块,有属性“锁定模式”,其中一个值是“延迟”。帮助文本:

Form Builder 仅在将事务发布到数据库时锁定行,而不是在最终用户编辑记录时锁定。如果在用户执行提交操作时块中的字段值发生了变化,Form Builder 会阻止处理提交操作。

所以如果设置了这个值,那么数据库记录只会在更新时被锁定。

2) 使用“Execution Hierarchy”属性 - “Override”(这是默认设置)为此块创建 ON-LOCK 触发器。并在触发器放置代码:

NULL;

在这种情况下,表单不会锁定记录,它只会在必要时由 DB 完成(在发出 UPDATE 语句之后,直到处理 COMMIT 或 ROLLBACK)。

【讨论】:

【参考方案2】:

仅当用户或触发器更改数据库绑定项时,Forms 才会锁定记录。

您可能有一些 WHEN-NEW-RECORD-INSTANCE 或 POST-CHANGE 触发器来更改数据库绑定项的值。 在搞乱锁定模式之前,您应该查看导致表单请求行锁定的原因。我敢打赌你会感到惊讶!

首先尝试在 Block & Item 级别禁用 ALL WHEN & POST 触发器,并检查表单是否仍然锁定批次。之后,首先启用触发器,直到您发现导致问题的触发器。

【讨论】:

以上是关于plsql批处理被表单屏幕阻止的主要内容,如果未能解决你的问题,请参考以下文章

如果显示键盘,iOS HTML 复选框屏幕将被阻止

js阻止form表单重复提交

处理 Windows 7 Aero 主题上的卸载表单[重复]

VC++实现会议中阻止屏保阻止系统自动关闭屏幕阻止系统待机

无法覆盖React组件内的表单的onSubmit处理程序

表单控件在表单创建后不久自动处理