Stored procedures 存储过程函数工作不正常?

Stored procedures 存储过程函数工作不正常?,stored-procedures,phpmyadmin,stored-functions,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_C

我正在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…)。提前感谢这个问题很可能是因为您对函数参数使用了与
iotrans中的列相同的名称造成的,因此,MySQL无法将它们区分开来,并且条件
,其中cardd=cardd
总是计算为
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
);

看看你的问题历史,我强烈建议你熟悉答案的概念。否则,会员将停止帮助你,因为你没有对他们帮助你的时间和努力表示感谢。这有帮助吗?你的问题需要更多的帮助吗?