1

我正在使用 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>

我想我至少会得到一个CALL proc_select_extern('value'); 在 MySQL 中报告,但我什至没有得到这个。

编辑:
所以我让它在一个空页面上作为 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 进行相同的操作。

4

3 回答 3

2

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

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

于 2012-06-02T14:56:13.223 回答
0

我没有在上面看到明确的答案。我遇到了同样的问题,并通过在 CF admin 中编辑数据源并在高级设置下,选中允许的 SQL 部分中的“存储过程”来修复它。

于 2012-08-29T18:56:33.353 回答
0

这对我有用:

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

我一直在寻找此错误消息的解决方案一段时间,但一无所获。我在 Coldfusion 10 上,我的 MySQL 程序在 MySQL 服务器上运行时运行良好。当我尝试时购买

<cfstoredprocedure .....

它引发以下错误:

"Error Executing Database Query. User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted, configure connection with "noAccessToProcedureBodies=true" to have driver generate parameters that represent INOUT strings irregardless of actual parameter types."

I have tried setting up a JDBC connection with the above parameter but it didn't help either. So ended up passing a call to the procedure as a query which seems to work fine. Dropping the solution here for future reference.

于 2013-07-23T18:37:31.800 回答