今夜の最後の質問です。まだ Coldfusion8 と MySQL を使用しています。
それぞれ価格 A、B、C の製品を含むテーブルがあります。すべての価格 (A_min、A_max、B_min、B_max、C_min、C_max) で A、B、C の最小値と最大値を取得する必要があります。
ストアド プロシージャを作成し、次のように A、B、C をループすると考えました。
<cfloop list="A,B,C" index="what" delimiters=",">
<cfstoredproc procedure="proc_search_select_minmax" datasource="dtb">
<cfprocparam type="in" value="#what#" cfsqltype="cf_sql_varchar" maxlength="15">
<cfprocparam type="in" value="#variables.xxx#" cfsqltype="cf_sql_varchar" maxlength="13">
<cfprocparam type="in" value="#variables.yyy#" cfsqltype="cf_sql_varchar" maxlength="13">
<cfprocparam type="in" value="#variables.zzz#" cfsqltype="cf_sql_text" maxlength="4">
<cfprocparam type="out" cfsqltype="cf_sql_decimal" variable="#what#_min">
<cfprocparam type="out" cfsqltype="cf_sql_decimal" variable="#what#_max">
</cfstoredproc>
</cfloop>
したがって、A、B、および C に対してこれを 3 回実行し、ループから変数 A_min、A_max、B_min... を取得するというアイデアがありました。
しかし、MySQL 内で次のように宣言している out-parameters に問題があります。
CREATE ... PROCEDURE `proc_search_select_minmax`(..., OUT `outputMin` DECIMAL(12,2), OUT `outputMax` DECIMAL(12,2))
....
SET outputMin = min(what);
SET outputMax = max(what);
コールドフュージョン エラーは次のように述べています。
Error Executing Database Query
@
<cfprocparam type="out" cfsqltype="cf_sql_decimal" variable="#what#_min">
<cfprocparam type="out" cfsqltype="cf_sql_decimal" variable="#what#_max">
質問:
出力パラメータに MySQL 内部と同じ名前を付ける必要がありますか? それとも正しい順序で十分ですか?
さらに重要なことに、このように出力変数を動的に設定できますか? そうでない場合、ストアド プロシージャを 3 回別々に呼び出す以外に方法はありますか?