【问题标题】:Stored procedure always returns false存储过程总是返回 false
【发布时间】:2016-01-21 23:43:03
【问题描述】:

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

有人有什么想法吗?

【问题讨论】:

  • @ref 更改为ref

标签: mysql vb.net stored-procedures


【解决方案1】:

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(...)

希望对您有所帮助。

【讨论】:

  • 您忽略了参数ref 和用户定义变量@ref 之间的差异。这是两个不同范围(程序与会话)中的两个不同名称空间,因此您的答案也不正确。此外,存储过程可以返回结果集,并且可以有OUTINOUT 参数。
猜你喜欢
  • 1970-01-01
  • 2013-02-02
  • 2013-01-17
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多