Выберите в переменную в MySQL объявить причины синтаксической ошибки?
Id как выбрать одно значение в переменную. Id попытался сделать следующее:
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.
10 ответов:
я столкнулся с этой же проблемой, но я думаю, что знаю, что вызывает путаницу. Если вы используете MySQL Query Analyzer, вы можете сделать это просто отлично:
SELECT myvalue INTO @myvar FROM mytable WHERE anothervalue = 1;
однако, если вы поместите тот же запрос в MySQL Workbench, он выдаст синтаксическую ошибку. Я не знаю, почему они будут отличаться, но они есть. Чтобы обойти проблему в MySQL Workbench, вы можете переписать запрос следующим образом:
SELECT @myvar:=myvalue FROM mytable WHERE anothervalue = 1;
в конце концов хранимая процедура была решением моей проблемы. Вот что помогло:
DELIMITER // CREATE PROCEDURE test () BEGIN DECLARE myvar DOUBLE; SELECT somevalue INTO myvar FROM mytable WHERE uid=1; SELECT myvar; END // DELIMITER ; call test ();
эти ответы не очень хорошо охватывают несколько переменных.
выполнение встроенного назначения в хранимой процедуре приводит к тому, что эти результаты также отправляются обратно в результирующий набор. Это может сбить с толку. Для использования выберите...В синтаксис с несколькими переменными вы делаете:
SELECT a, b INTO @a, @b FROM mytable LIMIT 1;
SELECT должен возвращать только 1 строку, следовательно, ограничение 1, хотя это не всегда необходимо.
вы также можете использовать SET вместо DECLARE
SET @myvar := (SELECT somevalue INTO myvar FROM mytable WHERE uid=1); SELECT myvar;
на документы MySQL объявить работает только в начале начала...Конечный блок как в сохраненной программе.
вам не нужно объявлять переменную в MySQL. Тип переменной определяется автоматически при первом присвоении ей значения. Его тип может быть одним из следующих: целочисленная, десятичная, с плавающей запятой, двоичная или небинарная строка или нулевое значение. Дополнительную информацию см. В документации по пользовательским переменным:
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
вы можете использовать SELECT ... В, чтобы назначить столбцы a переменная:
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 revision 11421 build 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';
все опции выше дают мне правильный результат.