今晚的最后一个问题,仍然使用 Coldfusion8 和 MySQL。
我有一个产品表,每个产品都有价格 A、B 和 C。我需要检索所有价格中 A、B、C 的最小值和最大值(A_min、A_max、B_min、B_max、C_min、C_max)
我想我会创建一个存储过程并像这样遍历 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... 退出循环。
但是我的 out-parameters 有问题,在 MySQL 中,我声明如下:
CREATE ... PROCEDURE `proc_search_select_minmax`(..., OUT `outputMin` DECIMAL(12,2), OUT `outputMax` DECIMAL(12,2))
....
SET outputMin = min(what);
SET outputMax = max(what);
Coldfusion错误说:
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 内部相同的名称,或者正确的顺序是否足够?
更重要的是,我可以像这样动态设置输出变量吗?如果没有,除了调用存储过程三次之外,还有其他方法吗?