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

标签 mysql stored-procedures dynamic coldfusion out-parameters

今晚的最后一个问题,仍然使用 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/

相关文章:

java - 如何使用动态创建的类作为泛型?

php - mySQL - 如果帖子在特定行中具有相同的值,则不要多次获取帖子

oracle - PL/SQL过程错误:(OBJECT IS INVALID) [closed]

php - 使用动态 URL 进行 PayPal 重定向

performance - 提高 CTE + normal select 并集的查询性能

mysql - 如何在 MySQL 存储过程中选择与可变数量参数匹配的值

c++ - 运行时链接库全局变量是否在加载了 dlopen 的插件之间共享?

php - 基本的sql注入(inject)

php - 为什么这个 PHP-MySQL 代码不能正常工作?

插入文本时出现 MySQL 错误 1292