MySQL: zaznaczanie wielu pól w wielu zmiennych w procedurze składowanej


106

Czy mogę WYBRAĆ wiele kolumn do wielu zmiennych w ramach tego samego zapytania wybierającego w MySQL?

Na przykład:

DECLARE iId INT(20);
DECLARE dCreate DATETIME;

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

Jaka jest poprawna składnia tego?

Odpowiedzi:


220

Twoja składnia nie jest do końca poprawna: musisz wymienić pola w kolejności przed INTO i odpowiadające im zmienne docelowe po:

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

6
+1. Jest to przypadek, w którym składnia T-SQL jest jaśniejsza. Posiadanie ich jako oddzielnych list powoduje ten sam problem z konserwacją, co DECLARE CURSOR i FETCH (nie żebym kiedykolwiek ich używał).
harpo

To samo dotyczy również Pl / Sql.
Aniket Thakur

11

========== Doradztwo ==========

@martin clayton Odpowiedź jest poprawna, ale to tylko rada.

Unikaj używania niejednoznacznych zmiennych w procedurze składowanej.

Przykład:

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

Powyższy przykład spowoduje błąd (błąd wartości zerowej)

Przykład podany poniżej jest poprawny. Mam nadzieję, że to ma sens.

Przykład:

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

Możesz również uczynić je jednoznacznymi, odwołując się do tabeli, na przykład:

[ Źródło : maganap ]

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

Możesz również uczynić je jednoznacznymi, odwołując się do tabeli, na przykład:SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p WHERE pName = iName
maganap

2

Alternatywnie do odpowiedzi Martina, możesz również dodać część INTO na końcu zapytania, aby zapytanie było bardziej czytelne:

SELECT Id, dateCreated FROM products INTO iId, dCreate

@KusalDissanayake Pytanie zostało zadane dla MySQL
ibai
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.