SELECT INTO variable en MySQL DECLARE provoca error de sintaxis?
-
28-09-2019 - |
Pregunta
Me gustaría seleccionar un solo valor en una variable. Me intentado siguiente:
DECLARE myvar INT(4);
-. Vuelve inmediatamente algún error de sintaxis
SELECT myvalue
FROM mytable
WHERE anothervalue = 1;
- devuelve un solo número entero
SELECT myvalue
INTO myvar
FROM mytable
WHERE anothervalue = 1;
- no funciona, también trató @myvar
Es posible utilizar DECLARE fuera de los procedimientos almacenados o funciones?
Puede que simplemente no te dan el concepto de variables de usuario ... he intentado:
SELECT myvalue INTO @var FROM `mytable` WHERE uid = 1;
SELECT @var;
... que funcionaba igual Está supuestamente. Pero si me quedo cada consulta en un momento simplemente me NULL @ var.
Solución 2
Al final de un procedimiento almacenado era la solución para mi problema. Tope aquí tienes 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 ();
Otros consejos
me encontré con este mismo tema, pero creo que sé lo que está causando la confusión. Si utiliza MySQL Query Analyzer, se puede hacer esto muy bien:
SELECT myvalue
INTO @myvar
FROM mytable
WHERE anothervalue = 1;
Sin embargo, si se pone la misma consulta en MySQL Workbench, arrojará un error de sintaxis. No sé por qué iban a ser diferentes, pero lo son. Para solucionar el problema en MySQL Workbench, puede volver a escribir la consulta como la siguiente:
SELECT @myvar:=myvalue
FROM mytable
WHERE anothervalue = 1;
Estas respuestas no cubren muy bien las variables MÚLTIPLES.
Hacer la asignación en línea en un procedimiento almacenado provoca esos resultados también ser enviados de vuelta en el conjunto de resultados. Eso puede ser confuso. Para utilizar la sintaxis SELECT ... INTO con múltiples variables que haces:
SELECT a, b INTO @a, @b FROM mytable LIMIT 1;
El SELECT debe devolver sólo 1 fila, por tanto, limitar 1, a pesar de que no siempre es necesario.
También puede utilizar SET en lugar de DECLARE
SET @myvar := (SELECT somevalue INTO myvar FROM mytable WHERE uid=1);
SELECT myvar;
la documentación de MySQL DECLARE sólo funciona en el inicio de un bloque BEGIN ... END como en un programa almacenado.
Usted no tiene que declarar una variable en MySQL. El tipo de una variable se determina automáticamente cuando se asigna primero un valor. Su tipo puede ser uno de: entero, decimal de coma flotante, cadena binaria o no binaria, o el valor NULL. Consulte la documentación de variables de usuario para obtener más información:
http://dev.mysql.com/doc/ RefMan / 5,0 / en / user-variables.html
Puede utilizar SELECT ... INTO para columnas asignar a una variable:
http://dev.mysql.com/ doc / RefMan / 5,0 / en / select-en-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)
Estoy utilizando la versión 6 (MySQL Workbench Comunidad (GPL) para Windows versión 6.0.9 build 11421 revisión 1170) en Windows Vista. No tengo ningún problema con las siguientes opciones. Probablemente lo arreglaron ya que estos chicos consiguieron 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';
Todo opción anterior me da un resultado correcto.
puede que se pierda el símbolo @ antes de que su valor, al igual que select 'test' INTO @myValue
;
Para aquellos que se ejecuta en estas cuestiones en este momento, sólo tratar de poner un alias para la tabla, esto debe el truco, por ejemplo:
SELECT myvalue
INTO myvar
FROM mytable x
WHERE x.anothervalue = 1;
Se trabajó para mí.
Saludos.