Oracle Forms-“ execute_query”命令非常慢

时间:2019-04-02 15:10:20

标签: sql oracle plsql oracleforms

以Oracle表单执行一些查询时出现问题。我的代码如下:

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

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

1 个答案:

答案 0 :(得分:1)

是哪个Forms版本?

如果从9i开始,则可以使用其调试选项并跟踪执行。如何启用?在您发布的触发器中右键单击左页边距,将断点设置为NEXT_BLOCK。在调试模式下运行表单(这是绿色的红绿灯图标,位于正常运行表单所用的图标旁边)。表单将在此处停止,让您逐步进行操作(意味着:逐个命令)。然后,您将了解发生了什么,执行了哪些触发器,在某些命令上花费了多少时间。

如果您使用的是6i,则将MESSAGE调用放入触发器中,以便您知道执行的顺序和顺序。

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

此外,尝试限制返回的行数;打开块的“属性选项板”,导航到“记录”部分并检查属性及其值(例如,如果“查询所有记录”设置为“是”,则将其设置为“否”)。 “缓冲的记录数”设置为什么?有关每个属性的更多信息,请单击它,然后按F1打开Forms Online Help System。

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