为什么我的Coldfusion存储过程没有在MySql中执行?

时间:2012-06-02 14:34:32

标签: mysql stored-procedures coldfusion

我正在使用Coldfusion8并试图获得一个简单的存储过程来运行MySQL id-lookup。

当我从MySQL内部启动程序时,它正在工作。但是在我的Coldfusion页面上,没有任何反应。

这是我的程序:

 CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_select_extern`(IN `iln_to_match` VARCHAR(13))
     LANGUAGE SQL
     NOT DETERMINISTIC
     READS SQL DATA
     SQL SECURITY DEFINER
     COMMENT ''
  BEGIN

      SELECT tn.iln
      FROM   teilnehmer AS tn
      WHERE tn.iln = iln_to_match
      LIMIT 1;
  END

我的程序在Coldfusion中调用:

<cfstoredproc procedure="proc_select_extern" datasource="dns">
   <cfprocparam type="in" value="#Session.Extern#" cfsqltype="cf_sql_varchar" maxlength="13">
   <cfprocresult name="extern">         
</cfstoredproc>
<cfoutput query="extern">
    <p>Hello #extern.username#</p>
</cfoutput>

我以为我至少会在MySQL中获得 CALL proc_select_extern('value'); 报告,但我甚至没有得到这个。

修改
所以我让它在一个空页面上作为CFQUERY工作:

 <cfquery datasource="db" NAME="extern">
   SELECT tn.iln
   FROM teilnehmer AS tn
   WHERE tn.iln = #Session.Extern#
   LIMIT 1
 </cfquery>
 <cfdump var="#extern#">
 <cfoutput>#IsDebugMode()#</cfoutput>

现在尝试使用storedProc。

3 个答案:

答案 0 :(得分:2)

是否存在某种形式的ColdFusion错误消息?此外,如果您在请求上启用了调试,您是否看到在那里进行过程调用?

另外,只是一个观察。存储过程中的SQL非常基本(单表选择没有连接)。将此作为存储过程将比内联查询创建更多的sql开销。使用存储过程不会带来任何性能提升。

答案 1 :(得分:0)

我上面没有看到明确的答案。我遇到了同样的问题并通过在CF管理员中编辑数据源来修复它,并在高级设置下,检查&#34;存储过程&#34;在允许的SQL部分中。

答案 2 :(得分:0)

这对我有用:

<cfquery name ="myQuery" datasource="mydataSource">
call sp_myprocedure();
</cfquery>

我一直在寻找这个错误消息的解决方案一段时间,但没有提出任何建议。我在coldfusion 10上,我的MySQL程序在MySQL服务器上运行时运行正常。我尝试时买。

<cfstoredprocedure .....

它会抛出以下错误:

  

“执行数据库查询时出错。用户无权访问元数据   需要确定存储过程参数类型。如果权利可以   不被授予,配置连接   “noAccessToProcedureBodies = true”让驱动程序生成参数   代表INOUT字符串,无论实际参数类型如何。“

我尝试使用上面的参数设置JDBC连接,但它也没有帮助。所以最终传递一个调用程序作为查询似乎工作正常。将解决方案放在此处以供将来参考。