MySQL: Auswählen mehrerer Felder in mehreren Variablen in einer gespeicherten Prozedur

106

Kann ich mehrere Spalten in mehreren Variablen innerhalb derselben Auswahlabfrage in MySQL AUSWÄHLEN?

Beispielsweise:

DECLARE iId INT(20);
DECLARE dCreate DATETIME;

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

Was ist die richtige Syntax dafür?

ein Jäger
quelle

Antworten:

220

Ihre Syntax ist nicht ganz richtig: Sie müssen die Felder in der Reihenfolge vor dem INTO und die entsprechenden Zielvariablen nach dem INTO auflisten:

SELECT Id, dateCreated
INTO iId, dCreate
FROM products
WHERE pName = iName
Martin Clayton
quelle
6
+1. Dies ist ein Fall, in dem die T-SQL-Syntax klarer ist. Diese als separate Listen zu haben, verursacht das gleiche Wartungsproblem wie DECLARE CURSOR und FETCH (nicht, dass ich diese jemals benutze).
Harpo
Gleiches gilt auch für Pl / Sql.
Aniket Thakur
11

========== Beratung ==========

@martin Clayton Antwort ist richtig, aber dies ist nur ein Rat.

Bitte vermeiden Sie die Verwendung mehrdeutiger Variablen in der gespeicherten Prozedur.

Beispiel:

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

Das obige Beispiel verursacht einen Fehler (Nullwertfehler)

Das unten angegebene Beispiel ist korrekt. Ich hoffe das macht Sinn.

Beispiel:

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

Sie können sie auch eindeutig machen, indem Sie auf die Tabelle verweisen, z.

[ Bildnachweis : maganap ]

SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p 
WHERE pName = iName
sijo vijayan
quelle
Sie können sie auch eindeutig machen, indem Sie auf die Tabelle verweisen, wie:SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p WHERE pName = iName
Maganap
2

Alternativ zu Martins Antwort können Sie auch den INTO-Teil am Ende der Abfrage hinzufügen, um die Abfrage besser lesbar zu machen:

SELECT Id, dateCreated FROM products INTO iId, dCreate
ibai
quelle
@KusalDissanayake Die Frage wurde für MySQL gestellt
ibai