Как выбрать возвращаемое значение из подготовленной инструкции mysql?

#mysql #database

#mysql #База данных

Вопрос:

Я пишу хранимую процедуру в MySQL. Ниже приведен код, который я написал:

 SET @qry = 'SELECT id into @wid FROM work_profile where candidate_id = 1223 limit 1';
PREPARE statement FROM @qry;
EXECUTE statement;
  

Однако после выполнения @wid равно нулю.

 SELECT id FROM work_profile where candidate_id = 1223 limit 1 
  

Это возвращает значение 1443.

Комментарии:

1. Содержит ли таблица work_profile какие-либо данные? Попробуйте выполнить ‘SELECT id FROM work_profile’. Пожалуйста, покажите полный код. Как вы используете переменную @wid?

2. …и как вы используете переменную @wid?

Ответ №1:

Для меня работает следующее:

 USE test;
DELIMITER $$
CREATE PROCEDURE GETNID()
BEGIN
  SET @query = 'SELECT 100 INTO @nid';
  PREPARE statement1 FROM @query;
  EXECUTE statement1;
END$$
DELIMITER ; 
  

И вызвать процедуру:

 CALL GETNUMBER();
SELECT @nid;
  

Однако, похоже, это не работает в браузере запросов MySQL. Мне пришлось прибегнуть к использованию клиента командной строки MySQL. Я подозреваю, что браузер запросов очищает сеанс после каждой инструкции.

Дополнительные примеры выполнения см. в руководстве MySQL:

Комментарии:

1. Вы даже можете добавить эту инструкцию select ‘SELECT @nid’ только внутри хранимой процедуры, и это даст вам ожидаемые результаты

Ответ №2:

Запрос может возвращать только одну строку для использования в этом синтаксисе. Либо укажите WHERE предложение, которое возвращает одну строку, либо добавьте LIMIT 1

Комментарии:

1. Но я добавил where и limit, хотя он возвращает null

Ответ №3:

Попробуйте это

 set @qry := 'test';
execute statement using @qry
  

Ответ №4:

Удалите INTO @wid из вашего запроса и добавьте LIMIT 1. Запрос вернет одну строку с нужным вам значением.