Czy mogę wywołać procedurę przechowywaną w cfloop i wyprowadzić dynamiczne parametry wyjściowe w Coldfusion?
Ostatnie pytanie na dziś wieczór, wciąż korzystające z Coldfusion8 i MySQL.
Mam tabelę z produktami, każdy z ceną A, B i C. Muszę pobrać wartości min i max dla A, B, C we wszystkich cenach (A_min, A_max, B_min, B_max, C_min, C_max)
Pomyślałem, że stworzę procedurę składowaną i przejdę przez A, B, C w ten sposób:
<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>
Pomysł polegał na trzykrotnym uruchomieniu A, B i C i usunięciu zmiennych A_min, A_max, B_min ... z pętli.
Ale mam problem z moimi parametrami wyjściowymi, które w MySQL deklaruję jak:
CREATE ... PROCEDURE `proc_search_select_minmax`(..., OUT `outputMin` DECIMAL(12,2), OUT `outputMax` DECIMAL(12,2))
....
SET outputMin = min(what);
SET outputMax = max(what);
Błąd Coldfusion mówi:
Error Executing Database Query
@
<cfprocparam type="out" cfsqltype="cf_sql_decimal" variable="#what#_min">
<cfprocparam type="out" cfsqltype="cf_sql_decimal" variable="#what#_max">
Pytania:
Czy muszę podawać moje parametry wyjściowe pod taką samą nazwą jak wewnątrz MySQL lub czy jest to wystarczająca kolejność?
Co ważniejsze, czy mogę ustawić zmienne wyjściowe dynamicznie w ten sposób? Jeśli nie, czy są jakieś inne sposoby oprócz wywołania procedury przechowywanej trzy razy?