gpt4 book ai didi

mysql - 我可以在 cfloop 中调用存储过程并在 Coldfusion 中输出动态输出参数吗?

转载 作者:行者123 更新时间:2023-11-29 08:51:44 25 4
gpt4 key购买 nike

今晚的最后一个问题,仍然使用 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 运行三次,并从循环中获取变量 A_min、A_max、B_min...。

但是我在 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);

冷融合错误说:

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 内部相同的名称,或者正确的顺序就足够了?
更重要的是,我可以像这样动态设置输出变量吗?如果不是,除了调用存储过程三次之外还有其他方法吗?

最佳答案

我从来不喜欢这样做的变量返回方式。有用但通常很困难(取决于顺序等)。

我有 2 条建议给你。

首先,将输出设为数据集。在您的存储过程中创建一个临时表(#myMinMax 或其他),其中最小和最大 2 列 - 使用插入填充该表,然后将其选择出来,将其返回为 <cfstoredprocresult..>

其次,我可能会创建一个存储过程,它执行循环并返回带有“类型”列的整个数据集...因此您最终会得到一个具有最小类型(如 A 中)(如 10 中)的数据集和最大值(如 100)... A 一行,B 一行,C 一行。与数据源的单个连接可以为您返回此数据集 - 避免 3 个(或更多)数据库调用。

关于mysql - 我可以在 cfloop 中调用存储过程并在 Coldfusion 中输出动态输出参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11004020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com