昨天我遇到了一些事情,我花了一段时间才弄清楚。在此代码中,当正在更新的表中不存在任何记录时,服务器会挂起,并且不会给出超时错误或任何错误。使用第二个表中的记录,代码可以正常工作。
<cfquery name="getSomething">
SELECT one, two
FROM some_table
WHERE conditions = 'my conditions'
</cfquery>
<cfloop query="getSomething">
<cfquery name="updateSomethingElse">
UPDATE other_table
SET three = 'my value'
WHERE four = #getSomething.one#
AND five = #getSomething.two#
</cfquery>
<!--- always run an insert --->
<cfquery name="insertSomething">
INSERT INTO other_table
(columns)
VALUES
(values)
</cfquery>
</cfloop>
我认为这是一个 CF 问题,因为在 Toad 中运行更新查询会在没有记录时完成人们所期望的 - 什么都没有。
我通过首先运行查询以获取第二个表中的记录计数来修复它,并且仅在记录计数大于 0 时才运行更新查询。
这是使用带有修补程序的 Oracle 10、CF 9.02。
注:select查询返回2K/20K记录之间;当第二个表中有现有记录时,更新和插入查询都可以正确运行;删除更新查询允许插入查询运行,而不管第二个表中是否有记录。
编辑:我将探索将更新和插入查询移出循环,如下所示。我仍然认为最初的问题(为什么服务器在第二个表中没有记录的情况下挂起)尚未得到回答。