【问题标题】: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 成员将停止帮助你,因为你没有对他们帮助你的时间和精力表示感谢。

标签: stored-procedures phpmyadmin stored-functions


【解决方案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
);

【讨论】:

  • 有帮助吗?您的问题需要更多帮助吗?
猜你喜欢
  • 1970-01-01
  • 2017-12-21
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 2013-04-09
  • 1970-01-01
相关资源
最近更新 更多