MySQL: seleccionar varios campos en varias variables en un procedimiento almacenado


106

¿Puedo SELECCIONAR varias columnas en varias variables dentro de la misma consulta de selección en MySQL?

Por ejemplo:

DECLARE iId INT(20);
DECLARE dCreate DATETIME;

SELECT Id INTO iId, dateCreated INTO dCreate 
FROM products
WHERE pName=iName;

¿Cuál es la sintaxis correcta para esto?

Respuestas:


220

Su sintaxis no es del todo correcta: debe enumerar los campos en orden antes de INTO y las variables de destino correspondientes después:

SELECT Id, dateCreated
INTO iId, dCreate
FROM products
WHERE pName = iName

6
+1. Este es un caso en el que la sintaxis de T-SQL es más clara. Tener estos como listas separadas causa el mismo problema de mantenimiento que DECLARE CURSOR y FETCH (no es que yo, uh, los use).
harpo

Lo mismo para Pl / Sql también.
Aniket Thakur,

11

========== Aconsejar ==========

@martin Clayton La respuesta es correcta, pero esto es solo un consejo.

Evite el uso de variables ambiguas en el procedimiento almacenado.

Ejemplo:

SELECT Id, dateCreated
INTO id, datecreated
FROM products
WHERE pName = iName

El ejemplo anterior provocará un error (error de valor nulo)

El ejemplo que se da a continuación es correcto. Espero que esto tenga sentido.

Ejemplo:

SELECT Id, dateCreated
INTO val_id, val_datecreated
FROM products
WHERE pName = iName

También puede hacerlos inequívocos haciendo referencia a la tabla, como:

[Crédito: maganap ]

SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p 
WHERE pName = iName

También puede hacerlos inequívocos haciendo referencia a la tabla, como:SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p WHERE pName = iName
maganap

2

Alternativamente a la respuesta de Martin, también puede agregar la parte INTO al final de la consulta para que la consulta sea más legible:

SELECT Id, dateCreated FROM products INTO iId, dCreate

@KusalDissanayake La pregunta se hizo para MySQL
ibai
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.