我使用ColdFusion代码调用存储过程:
<cffunction access="public" name="create" output="FALSE" returntype="numeric" hint="This function inserts a single bk_faqs record into the database." >
<cfargument name="faqQuestion" type="string" required="TRUE" default="" />
<cfargument name="faqAnswer" required="TRUE" default="" />
<cfset var faqID = "" />
<cfset var results = "" />
<cfstoredproc procedure="usp_bk_faqs_insert" datasource="#variables.datasource#">
<cfprocparam type="OUT" cfsqltype="CF_SQL_INTEGER" variable="faqID" dbvarname="_faqID" />
<cfprocparam type="IN" cfsqltype="CF_SQL_VARCHAR" variable="faqQuestion" dbvarname="_faqQuestion" value="#arguments.faqQuestion#" maxlength="255" />
<cfprocparam type="IN" cfsqltype="cf_sql_longvarchar" variable="faqAnswer" dbvarname="_faqAnswer" value="#arguments.faqAnswer#" />
<cfprocresult name="results" />
</cfstoredproc>
<cfset results = faqID />
<cfreturn results />
</cffunction>
使用我从MySQL站点下载的MySQL 5 jar和ColdFusion 11,我开始收到以下错误。在ColdFusion 10中,它是工作属性。
执行数据库查询时出错。
对于例程bakeryshop.usp_bk_faqs_insert,OUT或INOUT参数1是 BEFORE触发器中不是变量或NEW伪变量
错误发生在C:/ColdFusion11/cfusion/wwwroot/project1/cw4/admin/cfc/dao/dynamic/bk_faqs.cfc:line 112
答案 0 :(得分:2)
这不是ColdFusion问题。这似乎是MySQL的问题。检查存储过程是否具有out变量faqID。存储过程应该
插入语句后的 SELECT @faqID;
或类似的返回 faqID
答案 1 :(得分:0)
有许多关于该错误的错误报告,例如this one。在这种情况下听起来可能是一个驱动程序问题。您可以尝试不同的版本,但根据错误报告的年龄和数量,以及5.1.39和5.1.41具有相同问题的事实,它不是好兆...
就个人而言,我会完全摆脱OUT参数,只需通过SELECT返回ID。然后按照评论中的建议使用cfprocresult
捕获结果。假设您要从INSERT语句返回生成的ID,SQL将如下所示:
CREATE PROCEDURE `yourProcedureName`( ... IN parameters here ...)
BEGIN
--- your INSERT statement here
-- Return newly generated ID
SELECT LAST_INSERT_ID() AS FaqID
END
答案 2 :(得分:0)
威利,
我强烈建议您从中删除type属性并完全删除out参数,而不是完成所有这些操作。默认情况下,类型为IN。如下所示更改您的程序调用,它应该有效:
<cfset var faqID = "" />
<cfset var results = "" />
<cfstoredproc procedure="usp_bk_faqs_insert" datasource="#variables.datasource#">
<cfprocparam cfsqltype="CF_SQL_VARCHAR" variable="faqQuestion" dbvarname="_faqQuestion" value="#arguments.faqQuestion#" maxlength="255" />
<cfprocparam cfsqltype="cf_sql_longvarchar" variable="faqAnswer" dbvarname="_faqAnswer" value="#arguments.faqAnswer#" />
<cfprocresult name="results" />
</cfstoredproc>
<cfset results = faqID />
<cfreturn results />