MySQL: selezione di più campi in più variabili in una procedura memorizzata


106

Posso SELEZIONARE più colonne in più variabili all'interno della stessa query di selezione in MySQL?

Per esempio:

DECLARE iId INT(20);
DECLARE dCreate DATETIME;

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

Qual è la sintassi corretta per questo?

Risposte:


220

La tua sintassi non è del tutto corretta: devi elencare i campi in ordine prima di INTO e le variabili di destinazione corrispondenti dopo:

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

6
+1. Questo è un caso in cui la sintassi T-SQL è più chiara. Avere questi come elenchi separati causa lo stesso problema di manutenzione di DECLARE CURSOR e FETCH (non che io, uh, li usi mai).
arpione

Lo stesso per Pl / Sql.
Aniket Thakur

11

========== ========== Advise

@martin clayton La risposta è corretta, ma questo è solo un consiglio.

Si prega di evitare l'uso di variabili ambigue nella stored procedure.

Esempio :

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

L'esempio precedente causerà un errore (errore di valore nullo)

L'esempio riportato di seguito è corretto. Spero che questo abbia un senso.

Esempio :

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

Puoi anche renderli univoci facendo riferimento alla tabella, come:

[Credito: maganap ]

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

Puoi anche renderli univoci facendo riferimento alla tabella, come:SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p WHERE pName = iName
maganap

2

In alternativa alla risposta di Martin, potresti anche aggiungere la parte INTO alla fine della query per rendere la query più leggibile:

SELECT Id, dateCreated FROM products INTO iId, dCreate

@KusalDissanayake La domanda è stata posta per MySQL
ibai
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.