1

我正在尝试编写一个存储过程,select true如果提供的参数在 an 中enum,则将在false其他情况下。这是我目前的尝试:

DROP PROCEDURE IF EXISTS is_type_of_fruit;

delimiter //
CREATE PROCEDURE is_type_of_fruit (fruit VARCHAR(20))
BEGIN
  DECLARE fruit_types ENUM('APPLE','GRAPE','ORANGE');
  SELECT fruit IN(fruit_types);
END//

CALL is_type_of_fruit('APPLE');

看来我不能使用IN我通常用来检查项目是否在选项列表中的标准语法。我需要对ENUM类型使用不同的策略吗?

4

1 回答 1

1

遇到了这个非常古老的问题,试图做同样的事情。可能对原始海报没有太多用处,但已经为下一个人添加了这个答案。

DELIMITER //

DROP PROCEDURE IF EXISTS is_type_of_fruit //
CREATE PROCEDURE is_type_of_fruit (fruit VARCHAR(20))
BEGIN
  DECLARE fruit_types ENUM('APPLE','GRAPE','ORANGE');

  SET fruit_types = fruit;

  SELECT IF(fruit_types = fruit, TRUE, FALSE);
END//

DELIMITER ;

mysql> call is_type_of_fruit('cabbage');
+--------------------------------------+
| IF(fruit_types = fruit, TRUE, FALSE) |
+--------------------------------------+
|                                    0 |
+--------------------------------------+
1 row in set (0.00 sec)

mysql> call is_type_of_fruit('orange');
+--------------------------------------+
| IF(fruit_types = fruit, TRUE, FALSE) |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
1 row in set (0.00 sec)

应该提到这个方法不是严格模式友好的,所以如果你想使用它,你必须自己捕捉那个错误。

于 2017-11-05T17:53:07.923 回答