Stored procedures 存储过程函数工作不正常?
我正在phpmyadmin中编写一个用于考勤的过程函数。但如果条件允许,我从函数中获取错误信息 下面是不带if的过程和函数的示例代码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
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
);
看看你的问题历史,我强烈建议你熟悉答案的概念。否则,会员将停止帮助你,因为你没有对他们帮助你的时间和努力表示感谢。这有帮助吗?你的问题需要更多的帮助吗?