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?

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

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

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

@KusalDissanayake Die Frage wurde für MySQL gestellt
ibai
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.