2011-04-20 12 views
0

在我看來,枚舉在MySQL中至少在版本5.0.51a-24 + lenny5(Debian)中被破壞。我有一個包含一個枚舉場簡單的查找表:如何在MySQL過程中獲得ENUM的值

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,'')和其他一切似乎對枚舉有效的結果是一樣的: 我讀過的每篇文章都是ad-hoc工作的,但是返回空步驟!

我甚至嘗試過使用局部變量並將hackEnum定義爲相同的ENUM類型。

+0

注意:我不喜歡這個枚舉,但現在我必須忍受它(繼承代碼),所以請不要建議重新輸入枚舉來使用查找表,即使這最終是最佳答案。 – iisystems 2011-04-20 22:09:53

+0

模糊的可能性:嘗試'@hackEnum:= DNSType,@ipAddress:= CNameOrIp',以防萬一它是一個奇怪的解析器錯誤。 – 2011-08-05 20:36:43

回答

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

只聲明你的變量return,has varchar(xx);

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

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

和這一切!