Выберите в переменную в MySQL DECLARE заставляет синтаксис ошибки?

StackOverflow https://stackoverflow.com/questions/3075147

Вопрос

Я хотел бы выбрать одно значение в переменной. Я пытался следовать:

DECLARE myvar INT(4);

- Немедленно возвращает некоторую ошибку синтаксиса.

SELECT myvalue 
  FROM mytable 
 WHERE anothervalue = 1;

- возвращает одно целое число

SELECT myvalue 
  INTO myvar 
  FROM mytable 
 WHERE anothervalue = 1;

- Не работает, также пробовал @myvar

Можно использовать объявление вне сохраненных процедур или функций?

Может быть, я просто не получаю концепцию пользовательских переменных ... Я просто попробовал:

SELECT myvalue INTO @var FROM `mytable` WHERE uid = 1;
SELECT @var;

... который работал так же, как он должен. Но если я бегу каждый запрос в то время, я просто получаю @var null.

Это было полезно?

Решение 2

В конце хранимая процедура была решение для моей проблемы. Вот что помогло:

DELIMITER //
CREATE PROCEDURE test ()
  BEGIN
  DECLARE myvar DOUBLE;
  SELECT somevalue INTO myvar FROM mytable WHERE uid=1;
  SELECT myvar;
  END
  //

DELIMITER ;

call test ();

Другие советы

Я столкнулся с этой же проблемой, но я думаю, что знаю, что вызывает путаницу. Если вы используете MySQL Query Analyzer, вы можете сделать это просто хорошо:

SELECT myvalue 
INTO @myvar 
FROM mytable 
WHERE anothervalue = 1;

Однако, если вы поместите этот же запрос в MySQL Workbench, он будет бросать синтаксическую ошибку. Я не знаю, почему они будут разными, но они есть. Чтобы обойти проблему в MySQL Workbench, вы можете переписать такое запрос:

SELECT @myvar:=myvalue
FROM mytable
WHERE anothervalue = 1;

Эти ответы не охватывают очень хорошо несколько переменных.

Выполнение встроенного назначения в хранимой процедуре приводит к тому, что эти результаты также могут быть отправлены обратно в результаты. Это может быть запутано. Чтобы использовать SELECT ... в синтаксис с несколькими переменными, которые вы делаете:

SELECT a, b INTO @a, @b FROM mytable LIMIT 1;

Выбор должен вернуться только 1 строка, следовательно, ограничение 1, хотя это не всегда необходимо.

Вы также можете использовать набор вместо объявления

SET @myvar := (SELECT somevalue INTO myvar FROM mytable WHERE uid=1);

SELECT myvar;

Нами Документы MySQL Объявите работу только в начале начала ... End Block, как в сохраненной программе.

Вам не нужно объявлять переменную в MySQL. Тип переменной определяется автоматически при первом назначении значение. Его тип может быть одним из: целочисленного, десятичной, плавающей точкой, двоичной или нечеснарной строки или нулевое значение. Смотрите пользовательские переменные документации для получения дополнительной информации:

http://dev.mysql.com/doc/refman/5.0/en/user-variables.html.

Вы можете использовать Select ... IN на присвоении столбцов к переменной:

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';

Весь опция выше дает мне правильный результат.

Возможно, вы пропустите символ @ до вашей ценности, как это select 'test' INTO @myValue;

Для тех, кто работает в таких проблемах прямо сейчас, просто попробуйте поставить псевдоним для таблицы, это должен быть трюк, например:

SELECT myvalue 
  INTO myvar 
  FROM mytable x
 WHERE x.anothervalue = 1;

Это сработало для меня.

Ваше здоровье.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top