1

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

4

2 回答 2

1

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

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

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

因此,如果设置了此值,则数据库记录将仅在更新时锁定。

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

NULL;

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

于 2013-07-31T06:15:46.173 回答
0

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

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

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

于 2013-09-24T18:40:43.640 回答