我正在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 ....)。提前谢谢
答案 0 :(得分:0)
问题很可能是因为您使用同名 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
);