1

私の関数で数回、次のようなものがあります。

<cffunction name="mergeData">
<cfquery name="myQuery">
SELECT columnName FROM tableName
</cfquery>

<cfquery dbtype="query" name="myOtherQuery">
SELECT columnName FROM myQuery
</cfquery>
</cffunction>

<cfset resulta = mergeData(queryA) />
<cfset resultb = mergeData(queryB) />
<cfset resultc = mergeData(queryC) />

時折、エラーが発生しますThe select column reference [myQuery.columnname] is not found in table [myQuery].

それで、これを引き起こしている可能性があります。どうすれば診断できますか。私はそれがスコーピングの問題である可能性があると考えていたので<cfquery name="local.myQuery">、関数に含まれていることを確認するためだけに追加します (とにかくそうする必要があります)。しかし、何かが時々起こるとき、私は診断方法を理解するのに苦労します.

編集:スコープの問題である可能性が最も高い理由を明確にしました。私の考えではmyQuery、他の呼び出しで参照されている可能性があります。つまり、データに対して複数のスレッドを実行しているわけではありませんが、それが原因である可能性はありますか? 他に原因はありますか?エラーが発生した場合、これは常に当てはまるとは限りません。また、機能が一度しか実行されないページでも取得します。

4

2 に答える 2

3

クエリのクエリでは、localスコープ プレフィックスを角かっこで囲みます。

<cffunction name="mergeData">
    <cfquery name="local.myQuery">
        SELECT columnName FROM tableName
    </cfquery>

    <cfquery dbtype="query" name="local.myOtherQuery">
        SELECT columnName FROM [local].myQuery
    </cfquery>
</cffunction>

<cfset resulta = mergeData(queryA) />
<cfset resultb = mergeData(queryB) />
<cfset resultc = mergeData(queryC) />
于 2016-05-18T18:57:30.250 に答える
1

関数内のクエリのクエリで LOCAL が機能するようになったことはありません。

だからこうする……。

<cffunction>
<cfquery name="VARIABLES.myQuery">
SELECT columnName FROM tableName
</cfquery>

<cfquery dbtype="query" name="myOtherQuery">
SELECT columnName FROM VARIABLES.myQuery
</cfquery>
<cffunction>

特にクエリ オブ クエリでは、より明確な名前をクエリに使用することを強くお勧めします。

于 2016-05-18T18:38:46.143 に答える