1

少なくともバージョン 5.0.51a-24+lenny5 (Debian) では、列挙型が MySQL 内で壊れているように思えます。列挙型フィールドを含む単純なルックアップ テーブルがあります。

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 では null ではありません)。

DNSType+0、CONCAT(DNSType,'') など、列挙型で有効と思われるものすべてを選択してみましたが、結果は同じです。私が読んだすべての記事はアドホックに機能しますが、手順内では空を返します!

ローカル変数を使用して、hackEnum を同じ ENUM タイプとして定義しようとさえしました。

4

2 に答える 2

4

私はまったく同じ問題を抱えていました.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');

技術的には正しいものの、失敗しました。これがお役に立てば幸いです。

于 2011-08-05T18:38:07.503 に答える