Oracle Forms - "execute_query" 命令非常慢

Oracle Forms - "execute_query" command is very slow

我在 Oracle 表单中执行某些查询时遇到问题。我的代码如下所示:

--debug 0
next_block;
--debug 1
execute_query;
--debug 2

此代码来自 KEY-NXTBLK 触发器。我在 execute_query 命令之前和之后输出一些日志。直接在数据库中执行查询时它工作得很好,我在 2 秒 后得到结果,但在表格中我必须等待 2 分钟 才能得到结果。你知道为什么在表单中执行它需要这么长时间吗?也许我在那里遗漏了什么?是否有任何触发器与 execute_query 命令一起执行?

它是哪个表单版本?

如果是9i以后的版本,可以使用它的调试选项和跟踪执行。如何启用它?右键单击您发布的触发器的左边距,将断点设置为 NEXT_BLOCK。 运行 处于调试模式的表单(它是一个绿色的 交通灯 图标,紧挨着您通常用来 运行 表单的图标。表单将在此处停止,让您逐步进行(意思是:逐个命令)。然后你会看到发生了什么,执行了哪些触发器,在某些命令上花费了多少时间。

如果您使用的是 6i,请将 MESSAGE 调用放入触发器中,以便您了解正在执行的内容以及执行顺序。

关于您的问题:NEXT_BLOCK 本身可能会触发某些触发器,例如 WHEN-VALIDATE-RECORD(对于 "current" 块中的记录)、PRE-BLOCK(对于 "next" 块),WHEN-NEW-RECORD-INSTANCE(对于 "next" 块中的第一条记录)。 EXECUTE_QUERY 将导致 POST-QUERY 触发器触发(用于填充非数据库项目),因此如果查询 returns 很多行并且触发器为它们中的每一个触发多次并且可能需要一些时间去完成。

此外,尽量限制返回的行数;打开块的 属性 面板,导航到 "Records" 部分并检查属性及其值(例如,如果 "Query all records" 设置为 "Yes",请将其设置为 "No" ). "Number of records buffered" 设置为什么?有关每个 属性 的更多信息,请单击它并按 F1 打开 Forms 在线帮助系统。

检查块的 WHERE 子句,以及 ORDER BY。如果它们有些复杂,fetch 可能会受到影响。