MySQL 5.1 リファレンスマニュアル :: 17 ストアドプロシージャとファンクション :: 17.2 ストアドルーチン構文 :: 17.2.7 ストアドルーチン内の変数 :: 17.2.7.3 SELECT ... INTO ステートメント
« 17.2.7.2 変数 SET ステートメント

17.2.8 条件とハンドラ »
Section Navigation      [Toggle]
  • 17.2.7 ストアドルーチン内の変数
  • 17.2.7.1 DECLARE ローカル変数
  • 17.2.7.2 変数 SET ステートメント
  • 17.2.7.3 SELECT ... INTO ステートメント

17.2.7.3. SELECT ... INTO ステートメント

SELECT col_name[,...] INTO var_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. 「ストアド ルーチンとトリガの規制」も参照してください。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates