SELECTcol_name
[,...] INTOvar_name
[,...]table_expr
このSELECT
構文は選択されたカラムを直接変数の中に保存します。従って、1本の横列のみ取り出すことが許されています。
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
ユーザ変数名に対して、大文字小文字を区別されません。項8.4. 「ユーザによって定義された変数」 を参照してください。
重要SQL変数の名称をカラム名称と同じにすべきではありあません。SELECT
... INTO
のようなSQLステートメントが、カラムとローカル変数のリファレンスを同名で含んでいると、現在のMySQLはそのリファレンスを変数名だと認識します。例えば、次のステートメントの中では、xname
はxname
.カラムではなく、変数
カラム対するリファレンスと解釈されます:
CREATE PROCEDURE sp1 (x VARCHAR(5)) BEGIN DECLARE xname VARCHAR(5) DEFAULT 'bob'; DECLARE newname VARCHAR(5); DECLARE xid INT; SELECT xname,id INTO newname,xid FROM table1 WHERE xname = xname; SELECT newname; END;
このプロシージャを呼び出すとき、newname
変数は、table1.xname
カラムに関係なく、値'bob'
.を返します。
項D.1. 「ストアド ルーチンとトリガの規制」も参照してください。