存储过程函数不能正常工作?
Posted
技术标签:
【中文标题】存储过程函数不能正常工作?【英文标题】:stored procedure functions not working properly? 【发布时间】:2014-01-26 09:35:17 【问题描述】:我正在 phpmyadmin 中编写一个程序函数以用于出勤目的。但是如果出现条件,我会从函数中得到错误的信息。
下面是没有 if 的过程和函数的示例代码。
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `USP_GetEmployeeAttendanceReport`(IN selectedIndex int,IN searchText nvarchar(20),IN selectedDate datetime)
BEGIN
select FN_CheckEmpAttendanceStatus(selectedIndex,selectedDate);
END
函数 FN_CheckEmpAttendanceStatus
DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `FN_CheckEmpAttendanceStatus`(cardid varchar(150),selectedDate datetime) RETURNS int(11)
BEGIN
DECLARE result INT;
set result=(select count(*) from iotrans where CARDID=cardid and dt=selectedDate);
return result;
END
但是从函数中我得到了垃圾值(即 80,0,81,82....)。提前谢谢
【问题讨论】:
查看您的问题历史记录,我强烈建议您熟悉 upvoting/accepting 答案的概念。否则 SO 成员将停止帮助你,因为你没有对他们帮助你的时间和精力表示感谢。 【参考方案1】:这个问题很可能是由于你使用同名cardid
作为iotrans
中的列的函数参数,因此mysql无法区分它们并且条件WHERE CARDID=cardid
总是 评估为TRUE
。
始终为例程参数指定不同的名称。我建议提出一些命名方案,例如在参数名称前加下划线,以便您在所有代码中始终如一地执行此操作,并且可以轻松判断它是参数名称还是列名称。
在您的情况下,result
变量的另一件事是不必要的开销,BEGIN...END
块也是如此。
话虽如此,你的函数可能看起来像这样
CREATE DEFINER=`root`@`localhost`
FUNCTION FN_CheckEmpAttendanceStatus
(
_cardid varchar(150),
_selectedDate datetime
) RETURNS INT(11)
RETURN
(
SELECT COUNT(*)
FROM iotrans
WHERE cardid = _cardid
AND dt = _selectedDate
);
【讨论】:
有帮助吗?您的问题需要更多帮助吗?以上是关于存储过程函数不能正常工作?的主要内容,如果未能解决你的问题,请参考以下文章