Pregunta SELECT INTO Variable en MySQL DECLARE causa un error de sintaxis?


Me gustaría SELECCIONAR un solo valor en una variable. Intenté seguir:

DECLARE myvar INT(4);

- devuelve inmediatamente algún error de sintaxis.

SELECT myvalue 
  FROM mytable 
 WHERE anothervalue = 1;

- devuelve un solo entero

SELECT myvalue 
  INTO myvar 
  FROM mytable 
 WHERE anothervalue = 1;

- no funciona, también probé @myvar

¿Es posible usar DECLARE fuera de procedimientos o funciones almacenados?

Tal vez no entiendo el concepto de variables de usuario ... Acabo de probar:

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

... que funcionó exactamente como se suponía. Pero si ejecuto cada consulta a la vez, obtengo @var NULL.


75
2018-06-19 10:21


origen


Respuestas:


Me encontré con este mismo problema, pero creo que sé lo que está causando la confusión. Si usa MySql Query Analyzer, puede hacerlo bien:

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

Sin embargo, si coloca esa misma consulta en MySql Workbench, lanzará un error de sintaxis. No sé por qué serían diferentes, pero lo son. Para evitar el problema en MySql Workbench, puede volver a escribir la consulta de esta manera:

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

89
2017-09-07 18:46



Al final, un procedimiento almacenado fue la solución para mi problema. Esto es lo que ayudó:

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

DELIMITER ;

call test ();

32
2018-06-19 11:57



Estas respuestas no cubren muy bien variables MÚLTIPLES.

Hacer la asignación en línea en un procedimiento almacenado hace que esos resultados TAMBIÉN se envíen nuevamente en el conjunto de resultados. Eso puede ser confuso. Para usar la sintaxis SELECT ... INTO con múltiples variables:

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

El SELECT debe devolver solo 1 fila, por lo tanto LIMIT 1, aunque eso no siempre es necesario.


25
2017-09-09 21:51



También puede usar SET en lugar de DECLARAR

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

SELECT myvar;

17
2017-10-13 02:33



Por los documentos de MySQL DECLARE funciona solo al comienzo de un bloque BEGIN ... END como en un programa almacenado.


13
2018-06-19 10:26



No necesita DECLARAR una variable en MySQL. El tipo de una variable se determina automáticamente cuando se le asigna un valor por primera vez. Su tipo puede ser uno de: enteros, decimales, de coma flotante, cadenas binarias o no binarias, o valores NULL. Consulte la documentación de Variables definidas por el usuario para obtener más información:

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

Puede usar SELECT ... INTO para asignar columnas a una variable:

http://dev.mysql.com/doc/refman/5.0/en/select-into-statement.html

Ejemplo:

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)

8
2018-06-19 10:36



Vale la pena señalar que a pesar del hecho de que usted puede SELECT INTO variables globales como:

SELECT ... INTO @XYZ ...

Usted puede NO utilizar FETCH INTO variables globales como:

FETCH ... INTO @XYZ

Parece que no es un error. Espero que sea útil para alguien ...


3
2018-01-30 03:05



Estoy usando la versión 6 (MySQL Workbench Community (GPL) para Windows versión 6.0.9 revisión 11421 compilación 1170) en Windows Vista. No tengo problemas con las siguientes opciones. Probablemente lo arreglaron ya que estos tipos tuvieron los problemas hace tres años.

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

Todas las opciones anteriores me dan un resultado correcto.


2
2018-05-17 23:11