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.

¿Fue útil?

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)

Es importante destacar que a pesar del hecho de que puede SELECT INTO variables globales como:

SELECT ... INTO @XYZ ...

Puede no uso FETCH INTO variables globales como:

FETCH ... INTO @XYZ

Parece que no es un error . Yo espero que sea útil a alguien ...

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top