#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. Запрос вернет одну строку с нужным вам значением.