MySQL: Seleção de vários campos em várias variáveis ​​em um procedimento armazenado


106

Posso SELECIONAR várias colunas em várias variáveis ​​na mesma consulta de seleção no MySQL?

Por exemplo:

DECLARE iId INT(20);
DECLARE dCreate DATETIME;

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

Qual é a sintaxe correta para isso?

Respostas:


220

Sua sintaxe não está correta: você precisa listar os campos em ordem antes do INTO, e as variáveis ​​de destino correspondentes depois:

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

6
+1. Este é um caso em que a sintaxe T-SQL é mais clara. Ter essas como listas separadas causa o mesmo problema de manutenção que DECLARE CURSOR e FETCH (não que eu, uh, sempre use essas).
harpo

O mesmo para Pl / Sql também.
Aniket Thakur

11

========== Aconselhar ==========

@martin clayton A resposta está correta, mas este é apenas um conselho.

Evite o uso de variáveis ​​ambíguas no procedimento armazenado.

Exemplo:

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

O exemplo acima irá causar um erro (erro de valor nulo)

O exemplo abaixo está correto. Eu espero que isto faça sentido.

Exemplo:

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

Você também pode torná-los inequívocos referindo-se à tabela, como:

[Crédito: maganap ]

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

Você também pode torná-los inequívocos consultando a tabela, como:SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p WHERE pName = iName
maganap

2

Como alternativa à resposta de Martin, você também pode adicionar a parte INTO no final da consulta para torná-la mais legível:

SELECT Id, dateCreated FROM products INTO iId, dCreate

@KusalDissanayake A pergunta foi feita para MySQL
ibai
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.