Я хотел бы ВЫБРАТЬ одно значение в переменной. Я пробовал следующее:
DECLARE myvar INT(4);
- сразу возвращает синтаксическую ошибку.
SELECT myvalue
FROM mytable
WHERE anothervalue = 1;
- возвращает одно целое число
SELECT myvalue
INTO myvar
FROM mytable
WHERE anothervalue = 1;
- не работает, тоже пробовал @myvar
Можно ли использовать DECLARE вне хранимых процедур или функций?
Может, я просто не понимаю концепции пользовательских переменных ... Я просто попробовал:
SELECT myvalue INTO @var FROM `mytable` WHERE uid = 1;
SELECT @var;
... который работал так, как должен. Но если я запускаю каждый запрос за раз, я просто получаю @var NULL.
источник
:=
будет устаревшим. Так что предпочитаю использоватьSELECT ... INTO
!В конце концов, хранимая процедура стала решением моей проблемы. Вот что помогло:
DELIMITER // CREATE PROCEDURE test () BEGIN DECLARE myvar DOUBLE; SELECT somevalue INTO myvar FROM mytable WHERE uid=1; SELECT myvar; END // DELIMITER ; call test ();
источник
Эти ответы не очень хорошо охватывают НЕСКОЛЬКО переменных.
Выполнение встроенного назначения в хранимой процедуре приводит к тому, что эти результаты ТАКЖЕ отправляются обратно в наборе результатов. Это может сбивать с толку. Чтобы использовать синтаксис SELECT ... INTO с несколькими переменными, необходимо:
SELECT a, b INTO @a, @b FROM mytable LIMIT 1;
SELECT должен возвращать только 1 строку, следовательно LIMIT 1, хотя это не всегда необходимо.
источник
Вы также можете использовать SET вместо DECLARE
SET @myvar := (SELECT somevalue INTO myvar FROM mytable WHERE uid=1); SELECT myvar;
источник
Согласно документации MySQL, DECLARE работает только в начале блока BEGIN ... END, как в сохраненной программе.
источник
syntax error, missing ;
для меня ошибку.Вам не нужно ОБЪЯВЛЯТЬ переменную в MySQL. Тип переменной определяется автоматически при первом присвоении ей значения. Его тип может быть одним из: целое, десятичное, с плавающей запятой, двоичная или недвоичная строка или значение NULL. Дополнительную информацию см. В документации по пользовательским переменным:
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
Вы можете использовать SELECT ... INTO для присвоения столбцов переменной:
http://dev.mysql.com/doc/refman/5.0/en/select-into-statement.html
Пример:
mysql> SELECT 1 INTO @var; Query OK, 1 row affected (0.00 sec) mysql> SELECT @var; +------+ | @var | +------+ | 1 | +------+ 1 row in set (0.00 sec)
источник
Стоит отметить, что несмотря на то, что вы можете иметь такие
SELECT INTO
глобальные переменные, как:SELECT ... INTO @XYZ ...
Вы НЕ можете использовать
FETCH INTO
глобальные переменные, например:FETCH ... INTO @XYZ
Похоже, это не ошибка . Надеюсь, это будет кому-то полезно ...
источник
Я использую версию 6 (MySQL Workbench Community (GPL) для Windows версии 6.0.9, редакция 11421, сборка 1170) в Windows Vista. У меня нет проблем со следующими вариантами. Наверное, исправили, потому что у этих ребят проблемы появились три года назад.
/* first option */ SELECT ID INTO @myvar FROM party WHERE Type = 'individual'; -- get the result select @myvar; /* second option */ SELECT @myvar:=ID FROM party WHERE Type = 'individual'; /* third option. The same as SQL Server does */ SELECT @myvar = ID FROM party WHERE Type = 'individual';
Все варианты выше дают мне правильный результат.
источник
Для тех, кто сталкивается с такими проблемами прямо сейчас, просто попробуйте указать псевдоним для таблицы, это должно помочь, например:
SELECT myvalue INTO myvar FROM mytable x WHERE x.anothervalue = 1;
У меня это сработало.
Ура.
источник
Вы можете пропустить символ @ перед своим значением, вот так
select 'test' INTO @myValue
;источник
ВЫБЕРИТЕ c1, c2, c3, ... INTO @ v1, @ v2, @ v3, ... FROM table_name WHERE condition;
источник