查询在Workbench中有效,但在ColdFusion中返回错误
||
我已经创建了一个用于从FreeRADIUS访问记帐数据的存储过程,该存储过程已在MySQL Workbench中进行了测试,并且运行良好,但是当以cfquery / cfstoredproc身份运行时,出现错误“执行参数不正确”。
我已经检查了为MySQL 4/5设置的驱动程序(数据库为MySQL 5),并尝试从MySQL Workbench复制和粘贴调用并在不使用cfqueryparam的情况下运行,如下所示,但它仍然返回相同的错误。
存储过程是使用以下命令创建的
DELIMITER $$
CREATE PROCEDURE radius.GetUserDataUsageForMonth(IN StartDate DATE, IN EndDate DATE, IN UserName
VARCHAR(100))
BEGIN
SET @records = (SELECT COUNT(UserName) FROM `radius`.`radacct` WHERE userName = @UserName AND AcctStartTime BETWEEN @StartDate AND @EndDate) - 1;
SET @SqlQuery = \'SELECT SUM(AcctOutputOctets) AS BytesIN, SUM(AcctInputOctets) AS BytesOUT FROM
(SELECT * FROM `radius`.`radacct` WHERE userName = @UserName AND AcctStartTime BETWEEN @StartDate AND @EndDate LIMIT ?
UNION ALL
SELECT * FROM `radius`.`radacct` WHERE userName = @UserName AND AcctStartTime < @StartDate ORDER BY AcctStartTime DESC LIMIT 1) AS Totals;\';
PREPARE stmt FROM @SqlQuery;
EXECUTE stmt USING @records;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
打电话给我,我正在使用:
<cfquery name=\"qRadAccount_currentData\" datasource=\"#application.datasource_radius#\">
CALL radius.GetUserDataUsageForMonth(\'2011-06-01\',\'2011-07-01\',\'ryan.french\');
</cfquery>
我也尝试过
<cfstoredproc procedure=\"radius.GetUserDataUsageForMonth\" datasource=\"#application.datasource_radius#\" result=\"qRadAccount_currentData\">
<cfprocparam cfsqltype=\"cf_sql_date\" value=\"2011-06-01\">
<cfprocparam cfsqltype=\"cf_sql_date\" value=\"2011-07-01\">
<cfprocparam cfsqltype=\"cf_sql_varchar\" value=\"ryan.french\">
</cfstoredproc>
没有找到相关结果
已邀请:
1 个回复
靛取糕奖穿
当作为查询运行时,这将返回正确的值,但是当这些值作为存储过程从ColdFusion传入时,结果为-1(在查询中未找到行)。 我主要处理MS SQL,但我相信在MySQL中,@符号定义了局部变量或会话变量。结果,从ColdFusion调用时,变量不存在,从而导致错误。 我将上面的行替换为
并调用存储过程返回正确的结果。