Oracle Forms - “execute_query”命令很慢

Posted

技术标签:

【中文标题】Oracle Forms - “execute_query”命令很慢【英文标题】:Oracle Forms - "execute_query" command is very slow 【发布时间】:2019-04-02 15:10:19 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

它是哪个表单版本?

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

如果您在 6i 上,请将 MESSAGE 调用放入触发器中,以便您知道正在执行什么,按什么顺序执行。

根据您的问题:NEXT_BLOCK 本身可能会导致某些触发器触发,例如 WHEN-VALIDATE-RECORD(用于“当前”块中的记录)、PRE-BLOCK(用于“下一个”块)、@987654326 @(用于“下一个”块中的第一条记录)。 EXECUTE_QUERY 将导致 POST-QUERY 触发器触发(用于填充非数据库项),因此如果查询返回许多行并为每个行多次触发,则可能需要一些时间才能完成。

此外,尽量限制返回的行数;打开块的属性面板,导航到“记录”部分并检查属性及其值(例如,如果“查询所有记录”设置为“是”,则将其设置为“否”)。 “缓冲的记录数”设置为多少?有关每个属性的更多信息,请单击它并按 F1 打开表单在线帮助系统。

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

【讨论】:

以上是关于Oracle Forms - “execute_query”命令很慢的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Forms 10g 中创建/修改的 Form(FMB) 降级为 Oracle Forms 9

oracle forms 10g,运行一个form

8 Most Required Examples Reference For Oracle Forms

Pre-Query trigger in Oracle D2k / Oracle Forms

Displaying Window In Center In Oracle Forms 6i

Date Picker Calendar For Oracle Forms 6i