2016-01-21 68 views
0

如果表中不存在参数中传递的值,则此存储过程应返回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中只有一个值。

有没有人有任何想法?

+0

将'@ ref'更改为'ref'。 –

回答

0

一个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”参数。 –