如何在MySQL过程中获取ENUM的值

时间:2011-04-20 21:59:26

标签: mysql enums procedures

在我看来,枚举在MySQL中是破坏的,至少在版本5.0.51a-24 + lenny5(Debian)上是如此。我有一个简单的查找表,其中包含一个枚举字段:

CREATE TABLE `FrameworkServices` (
  ...
  `DNSType` enum('IP','CNAME') NOT NULL,
  ...
)

Ad-hoc,我可以毫无问题地运行以下内容:

SELECT DNSType, CNameOrIP INTO @hackEnum, @ipAddress
FROM FrameworkServices WHERE FrameworkTypeId = 1 LIMIT 1;
SELECT @hackEnum, @ipAddress;

但是,如果我将EXACT相同的代码放入过程中,@ hackEnum将返回空(非空,至少通过TOAD)。

我已经尝试选择DNSType + 0,CONCAT(DNSType,'')以及其他似乎在枚举上有效的内容,结果是相同的:    我阅读的每篇文章都是ad-hoc,但在Procedure!中返回为空!

我甚至尝试使用局部变量并将hackEnum定义为相同的ENUM类型。

2 个答案:

答案 0 :(得分:3)

我遇到了完全相同的问题 - 我正在检索ENUM值,然后通过IF...ELSE...END IF进行检查。这不起作用,让我疯狂,为什么不。解决方案是选择char(1),然后将ENUM列值视为字符串:

DECLARE use_free CHAR(1);

SELECT use_free INTO use_free FROM ...;

IF use_free = '1' THEN
  <do something>
ELSE
  <do something else>
END IF;

我第一次使用:

DECLARE use_free ENUM('0','1');

虽然技术上正确,但失败了。希望这会对你有所帮助。

答案 1 :(得分:0)

只声明你的return变量,有varchar(xx);

CREATE TABLE `FrameworkServices` (
  ...
  `DNSType` enum('IP','CNAME') NOT NULL,
  ...
)

declare valor varchar(40);
select DNSType from FrameworkServices into valor; 

这一切!!