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批处理被表单屏幕阻止的主要内容,如果未能解决你的问题,请参考以下文章