以Oracle表单执行一些查询时出现问题。我的代码如下:
--debug 0
next_block;
--debug 1
execute_query;
--debug 2
此代码来自 KEY-NXTBLK 触发器。我在 execute_query 命令之前和之后输出一些日志。在数据库中直接执行查询时,效果很好,并且我在 2秒后就得到了结果,但是在Forms中我必须等待 2分钟才能得到结果。您知道为什么要花这么长时间执行表单吗?也许我在那里缺少什么?是否有任何触发器与execute_query命令一起执行?
答案 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
。如果它们有些复杂,则获取可能会受到影响。