【问题标题】:How can you get the value of an ENUM within a MySQL Procedure如何在 MySQL 过程中获取 ENUM 的值
【发布时间】:2011-04-20 21:59:26
【问题描述】:

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

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

临时,我可以毫无问题地运行以下命令:

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

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

我尝试选择 DNSType+0、CONCAT(DNSType,'') 和其他所有在枚举上似乎有效的东西,结果是一样的: 我阅读的每篇文章都是临时工作的,但在过程中返回为空!

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

【问题讨论】:

  • 注意:我不喜欢这个枚举,但我现在必须忍受它(继承代码),所以请不要建议重新输入枚举以使用查找表,即使这个最终是最好的答案。
  • 模糊的可能性:尝试@hackEnum := DNSType, @ipAddress := CNameOrIp,以防它是一些奇怪的解析器错误。

标签: mysql enums procedures


【解决方案1】:

我遇到了完全相同的问题 - 我正在检索一个 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');

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

【讨论】:

    【解决方案2】:

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

    CREATE TABLE `FrameworkServices` (
      ...
      `DNSType` enum('IP','CNAME') NOT NULL,
      ...
    )
    
    declare valor varchar(40);
    select DNSType from FrameworkServices into valor; 
    

    还有这一切!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2018-05-01
      相关资源
      最近更新 更多