어제 뭔가 알게되었습니다. 이 코드에서 업데이트중인 테이블에 레코드가 없으면 서버가 중단되고 시간 초과 오류 또는 그와 관련된 오류가 발생하지 않습니다. 두 번째 테이블의 레코드를 사용하면 코드가 올바르게 작동합니다. 아무것도 - 두꺼비의 업데이트 쿼리를 실행하는 레코드가 없을 때 사람이 무엇을 기대 않기 때문에 나는이를 생각하고테이블이 비어있을 때 레코드 업데이트 - CF가 응답하지 않습니다.
<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의 문제입니다.
나는 첫 번째 테이블의 레코드 수를 얻을 수있는 쿼리를 실행하고 레코드 개수가 0보다 큰
이 오라클 (10)를 사용하고, CF 9.02 경우에만 업데이트 쿼리를 실행하여 고정 핫픽스와 함께.
참고 : select 쿼리는 2K/20K 레코드 사이에서 반환됩니다. 두 번째 테이블에 기존 레코드가 있으면 업데이트 및 삽입 쿼리가 모두 올바르게 실행됩니다. 업데이트 쿼리를 제거하면 두 번째 테이블에 레코드가 있는지 여부에 관계없이 삽입 쿼리를 실행할 수 있습니다.
편집 : 아래 제안 된대로 루프에서 업데이트 및 삽입 쿼리를 모두 이동하는 방법을 살펴 보겠습니다. 나는 여전히 (서버가 두 번째 테이블에 레코드가없는 상황에 처한 이유에 대한) 원래 질문이 아직 답변되지 않았다고 생각한다.
_ ". 테이블의 레코드와는 코드가 잘 작동"_ - 아니 그렇지 않은; cfloop의 query 속성에 닫는 인용 부호가 없습니다. 쿼리 루프는 레코드가 없으면 본문을 실행하지 않으므로 여기에 표시된 것보다 더 많은 쿼리 루프가 있어야합니다. –
이것은 문제를 설명하기 위해 타이핑 한 것입니다. 실제 코드는 정확했습니다. 그리고 제가 언급했듯이, 테이블에 레코드가있을 때 괜찮습니다. 또한 select 쿼리는 int로 전달 된 params에 따라 2K와 20K 레코드를 반환합니다. – earachefl
_actly_ 코드 (_only_ 민감한 정보/반복 정보가 새 니타 이징/스 니핑 됨)를 제공하면 항상 쉽고 명확 해집니다. –