MySQL: Bir saklı yordamda birden çok değişkene birden çok alan seçme


106

MySQL'de aynı seçme sorgusu içinde birden çok sütunu birden çok değişkene SEÇEBİLİR miyim?

Örneğin:

DECLARE iId INT(20);
DECLARE dCreate DATETIME;

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

Bunun için doğru sözdizimi nedir?

Yanıtlar:


220

Kişisel sözdizimi pek doğru değildir: INTO önce sırayla bölümleri listeler gerekiyor ve karşılık gelen hedef değişkenleri sonra:

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

6
+1. Bu, T-SQL sözdiziminin daha net olduğu bir durumdur. Bunları ayrı listeler olarak bulundurmak, DECLARE CURSOR ve FETCH ile aynı bakım sorununa neden olur (bunları hiç kullanmadığımdan değil).
harpo

Pl / Sql için de aynı.
Aniket Thakur

11

========== Tavsiye ==========

@martin clayton Cevap doğru, Ama bu sadece bir tavsiye.

Lütfen saklı yordamda belirsiz değişken kullanımından kaçının.

Misal :

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

Yukarıdaki örnek bir hataya neden olur (boş değer hatası)

Aşağıdaki örnek doğrudur. Umarım bu mantıklıdır.

Misal :

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

Ayrıca tabloya atıfta bulunarak bunları belirsiz hale getirebilirsiniz, örneğin:

[Kredi: maganap ]

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

Ayrıca, tabloya atıfta bulunarak bunları SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p WHERE pName = iName
netleştirebilirsiniz

2

Martin'in cevabına alternatif olarak, sorguyu daha okunaklı hale getirmek için sorgunun sonuna INTO bölümünü de ekleyebilirsiniz:

SELECT Id, dateCreated FROM products INTO iId, dCreate

@KusalDissanayake Soru MySQL için soruldu
ibai
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.