存储过程总是返回假
问题描述:
如果表中不存在参数中传递的值,则此存储过程应返回false。存储过程总是返回假
CREATE DEFINER=`listsjag_user`@`%` PROCEDURE `Select_ReferenceAvailability`(IN ref VARCHAR(45))
BEGIN
IF EXISTS (
SELECT * FROM tbl_dataLibrary
WHERE itemreference = @ref
) THEN
SELECT 'true';
ELSE
SELECT 'false';
END IF;
END
它对所有值都返回true,但列itemreference中只有一个值。
有没有人有任何想法?
答
一个MySQL存储过程不能真的返回一个值。您可以传入OUT参数并对其进行修改,或将您的程序转换为函数。
CREATE FUNCTION ReferenceAvailability (IN ref VARCHAR(45))
RETURNS boolean
BEGIN
IF(EXISTS(SELECT * FROM tbl_dataLibrary WHERE itemreference = @ref)) THEN
RETURN 1;
END IF;
RETURN 0;
END;
我改变了你的真/假到1/0,随意更改回来,但你将需要返回VARCHAR(5)。
使用在选择这样的功能:
SELECT ReferenceAvailability(...)
希望有所帮助。
+0
您忽略了参数'ref'和用户定义变量'@ ref'之间的差异。这些是两个不同范围(程序与会话)中的两个不同名称空间,所以你的答案也是不正确的。此外,存储过程可以返回结果集,并且可以具有“OUT”或“INOUT”参数。 –
将'@ ref'更改为'ref'。 –