我有一个Oracle Forms 6i应用程序,并且有一个plsql批处理,两者都在对同一个表进行更新。有些字段以Forms应用程序的形式直接映射到表列。只要打开访问表的表单,就会阻止plsql批处理。如何创建表单,以便它不会阻止任何其他数据库会话。有没有办法加载/创建窗体的实例,以便它不会对表保持任何锁定?
答案 0 :(得分:1)
您可以尝试以下两种可能之一:
1)对于块,存在“锁定模式”属性,其中一个值为“延迟”。来自帮助的文字:
表单生成器仅在将事务发布到数据库时锁定行,而不是在最终用户编辑记录时锁定行。如果用户导致提交操作时块中字段的值已更改,则表单生成器会阻止提交操作处理。
因此,如果设置了此值,则DB记录将仅在更新时锁定。
2)为此块创建ON-LOCK触发器,具有“Execution Hierarchy”属性 - “Override”(这是默认值)。并在触发器代码中:
NULL;
在这种情况下,表单不会锁定记录,只有在必要时才会由DB完成(在发出UPDATE语句之后直到处理COMMIT或ROLLBACK)。
答案 1 :(得分:0)
仅当用户或触发器更改数据库绑定项时,窗体才会锁定记录。
您可能有一些WHEN-NEW-RECORD-INSTANCE或POST-CHANGE触发器,用于更改数据库绑定项的值。 在搞乱锁定模式之前,您应该看一下导致表单请求行锁定的原因。我打赌你会感到惊讶!
首先尝试禁用ALL WHEN& Block&的POST触发器项级别,并检查表单是否仍锁定批次。之后启动启动,直到找到导致问题的触发器。