MySQL: Memilih beberapa bidang menjadi beberapa variabel dalam prosedur tersimpan


106

Dapatkah saya MEMILIH beberapa kolom menjadi beberapa variabel dalam kueri pemilihan yang sama di MySQL?

Sebagai contoh:

DECLARE iId INT(20);
DECLARE dCreate DATETIME;

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

Apa sintaks yang benar untuk ini?

Jawaban:


220

Sintaks Anda kurang tepat: Anda perlu membuat daftar bidang secara berurutan sebelum INTO, dan variabel target yang sesuai setelah:

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

6
+1. Ini adalah kasus di mana sintaks T-SQL lebih jelas. Memiliki ini sebagai daftar terpisah menyebabkan masalah pemeliharaan yang sama seperti MENYATAKAN KURSOR dan FETCH (bukan karena saya, eh, pernah menggunakannya).
harpo

Sama untuk Pl / Sql juga.
Aniket Thakur

11

========== Menyarankan ==========

@martin clayton Jawaban benar, Tapi ini hanya saran.

Harap hindari penggunaan variabel ambigu dalam prosedur tersimpan.

Contoh:

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

Contoh di atas akan menyebabkan kesalahan (kesalahan nilai null)

Contoh yang diberikan di bawah ini benar. Saya harap ini masuk akal.

Contoh:

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

Anda juga dapat membuatnya tidak ambigu dengan mereferensikan tabel, seperti:

[Kredit: maganap ]

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

Anda juga bisa membuatnya tidak ambigu dengan mereferensikan tabel, seperti:SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p WHERE pName = iName
maganap

2

Sebagai alternatif untuk jawaban Martin, Anda juga bisa menambahkan bagian INTO di akhir kueri agar kueri lebih mudah dibaca:

SELECT Id, dateCreated FROM products INTO iId, dCreate

@KusalDissanake Pertanyaan telah diajukan untuk MySQL
ibai
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.