如果提供的参数位于select
和true
,我正在尝试编写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
类型使用不同的策略吗?
答案 0 :(得分: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)
应该提一下,这种方法不是严格模式友好的,所以如果你想使用它,你必须自己捕捉到这个错误。