plsql批处理被表单屏幕阻止



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

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

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

表单生成器仅在将事务发布到数据库时锁定行,而不是在最终用户编辑记录时锁定行。如果用户导致提交操作时块中字段的值发生了更改,则Form Builder将阻止处理提交操作。

所以,如果设置了这个值,那么DB记录将只在更新时锁定。

2) 为该块创建ON-LOCK触发器,具有"Execution Hierarchy"属性-"Override"(这是默认值)。在触发码中:

NULL;

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

Forms只有在用户或触发器更改数据库绑定项时才会锁定记录。

您可能有一些WHEN-NEW-RECORD-INSTANCE或POST-CHANGE触发器,可以更改数据库绑定项的值。在处理锁定模式之前,您应该了解是什么原因导致窗体请求行锁定。我打赌你一定会大吃一惊!

首先尝试禁用ALL WHEN&在块&项级别,并检查表单是否仍锁定该批。之后,开始启用触发器,直到发现导致问题的触发器。

最新更新