Как вы можете получить значение ENUM в процедуре MySQL - PullRequest
0 голосов
/ 21 апреля 2011

Мне кажется, что перечисления в MySQL нарушены, по крайней мере, в версии 5.0.51a-24 + lenny5 (Debian).У меня есть простая таблица поиска, которая содержит поле enum:

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, но возвращает пустую в Процедуре!

Я даже пытался использовать локальные переменные и определять hackEnum как тот же тип ENUM.

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

У меня была точно такая же проблема - я получал значение 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 голосов
/ 24 августа 2017

Объявляется только ваша переменная возврата, имеет varchar (xx);

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

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

и это все !!

...