2011-04-20 14 views
0

少なくとも、バージョン5.0.51a-24 + lenny5(Debian)では、enumがMySQL内で壊れているようです。私は手順にEXACT同じコードを置けば、MySQLの手順の中でENUMの価値を得る方法

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

しかし:

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

アドホックが、私は問題なく次のことを実行することができます:私は、enumフィールドを含む単純なルックアップテーブルを持っています、@hackEnumは空を返します(少なくともTOADではnullではありません)。

私はDNSType + 0、CONCAT(DNSType、 '')を選択しようとしましたが、列挙型で有効であると思われるものはすべて同じです: すべての記事は随時読み込みますが、手順!

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

+0

注:私はこの列挙型が気に入らないが、現在は継承されているコードのために生きなければならないので、ルックアップテーブルを使用するために列挙型を再入力することを推奨しないでください。 。 – iisystems

+0

漠然としている可能性があります:代わりに '@hackEnum:= DNSType、@ipAddress:= CNameOrIp'を試してみてください。 –

答えて

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'); 

及び技術的に正しいが、失敗しました。これがあなたを助けることを願っています

0

返される変数は、varchar(xx)を宣言するだけです。

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

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

とこのすべて!

関連する問題