存储过程功能无法正常工作?

时间:2014-01-08 10:33:13

标签: stored-procedures phpmyadmin stored-functions

我正在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 ....)。提前谢谢

1 个答案:

答案 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
);