MySQL:ストアドプロシージャで複数のフィールドを複数の変数に選択する


106

MySQLの同じ選択クエリ内で複数の列を複数の変数にSELECTできますか?

例えば:

DECLARE iId INT(20);
DECLARE dCreate DATETIME;

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

これの正しい構文は何ですか?

回答:


220

あなたの構文は非常に適切ではありません:あなたはINTOの前に順番にフィールドをリストする必要があり、対応するターゲット変数の後に:

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

6
+1。これは、T-SQL構文がより明確な場合です。これらを別々のリストとして持つと、DECLARE CURSORとFETCHと同じメンテナンス問題が発生します(私がそれらを使用することはありません)。
harpo

Pl / Sqlについても同様です。
Aniket Thakur

11

==========アドバイス==========

@マーティンクレイトン答えは正しいですが、これはアドバイスにすぎません。

ストアドプロシージャでのあいまいな変数の使用は避けてください。

例:

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

上記の例ではエラー(null値エラー)が発生します

以下の例は正しいです。これが理にかなっているといいのですが。

例:

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

次のように、テーブルを参照してそれらを明確にすることもできます。

[クレジット:maganap ]

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

また同様に、テーブルを参照することによって、それらを明確にすることができますSELECT p.Id, p.dateCreated INTO id, datecreated FROM products p WHERE pName = iName
maganap

2

マーティンの答えの代わりに、クエリの最後にINTO部分を追加して、クエリを読みやすくすることもできます。

SELECT Id, dateCreated FROM products INTO iId, dCreate

@KusalDissanayake MySQLに質問が寄せられました
ibai '27
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.