昨日、理解するのに時間がかかったものに出くわしました。このコードでは、更新中のテーブルにレコードが存在しない場合にサーバーがハングし、タイムアウト エラーやそれに関するエラーは発生しません。2 番目のテーブルのレコードを使用すると、コードは正常に機能します。
<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>
Toad で更新クエリを実行すると、レコードがない場合に期待されることを実行するため、これは CF の問題であると考えています。
最初にクエリを実行して 2 番目のテーブルのレコード数を取得し、レコード数が 0 より大きい場合にのみ更新クエリを実行することで修正しました。
これは、ホットフィックスを適用した Oracle 10、CF 9.02 を使用しています。
注: select クエリは 2K/20K レコードの間で返されます。2 番目のテーブルに既存のレコードがある場合、更新クエリと挿入クエリの両方が正しく実行されます。更新クエリを削除すると、2 番目のテーブルにレコードがあるかどうかに関係なく、挿入クエリを実行できます。
編集: 以下で提案されているように、更新クエリと挿入クエリの両方をループから移動することを検討します。ただし、元の質問 (2 番目のテーブルにレコードがない状況でサーバーがハングする理由) はまだ回答されていないと思います。