Как смоделировать печать в хранимой процедуре MySQL - PullRequest
10 голосов
/ 09 марта 2009

У меня есть хранимая процедура MySQL с несколькими курсорами. Я хочу напечатать значение, чтобы отправить вывод обратно клиенту. SQLyog Enterprise .

Я попытался объявить переменную как TEXT и объединить внутри цикла, но это не работает, по крайней мере, не так, как я пытался это сделать.

DECLARE _output TEXT;
DECLARE _ID INT DEFAULT 0;
DECLARE cur1 CURSOR FOR SELECT ID FROM CodeID;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN cur1;

REPEAT
  FETCH cur1 INTO _ID;
  IF NOT done THEN
    SET _output = _ID; /*SEE ALT BELOW*/

  END IF;
UNTIL done END REPEAT;
CLOSE cur1;

SELECT _output;

Я пробовал:

SET _output = _output + _ID

и

SET _output = CONCAT(_output,_ID)

но они оба просто возвращают NULL

SET _output = _ID; просто дает мне последний извлеченный ряд. Что полезно, но не совсем то, что я хотел.

Каков наилучший способ вывода каждой извлеченной строки на экран для воспроизведения печати MySQL в хранимой процедуре MySQL?

1 Ответ

15 голосов
/ 09 марта 2009

Вы делаете это правильно с вашим SELECT _output; Все, что выбрано без предложения INTO, будет возвращено клиенту.

Чтобы получить их все, вы можете либо переместить SELECT в цикл (для печати каждого по отдельности), либо объединить их вместе. Проблема с вашим concat, возвращающим NULL, была в том, что вы не инициализировали _output ни для чего, поэтому он был NULL. Сопоставление чего-либо с NULL вернет NULL.

Попробуйте следующее:

DECLARE _output TEXT DEFAULT '';
DECLARE _ID INT DEFAULT 0;
DECLARE cur1 CURSOR FOR SELECT ID FROM CodeID;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN cur1;

REPEAT
  FETCH cur1 INTO _ID;
  IF NOT done THEN
    SET _output = CONCAT(",", _ID); /*SEE ALT BELOW*/

  END IF;
UNTIL done END REPEAT;
CLOSE cur1;

SELECT _output;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...