MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのDECLAREで変数を宣言する方法|ストアドプロシージャでの使い方を解説

MySQLでは、DECLAREステートメントを使ってローカル変数を宣言できます。ただし、DECLAREが使用できるのはストアドプロシージャ(またはファンクション)の中だけという点に注意が必要です。通常のSQL文として単独で実行することはできません。

DECLAREの基本構文

DECLAREの基本的な書き方は以下の通りです。

declare 変数名 データ型;

宣言した変数には、後述するSET文などで値を代入して使用します。なお、DECLAREはBEGIN〜ENDブロックの先頭に記述する必要がある点も押さえておきましょう。

サンプル:ストアドプロシージャで変数を使ってみる

それでは、実際にDECLAREを使ったストアドプロシージャを作成してみましょう。ここでは、引数として渡した数値の2乗を計算して表示するプロシージャを作成します。

mysql> delimiter //
mysql> create procedure square_demo(in Value int)
    begin
    declare magicValue int;
    set magicValue=Value;
    select concat('Your Square Value=',magicValue*magicValue) as Output;
    end ;
    //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;

コードのポイント

  • delimiter //:プロシージャ本体の終了を示すセミコロンと区別するため、デリミタを「//」に変更しています。
  • declare magicValue int;:整数型(int)のローカル変数「magicValue」を宣言しています。
  • set magicValue=Value;:引数Valueの値を変数magicValueに代入しています。
  • select concat(...):変数同士を掛け合わせた結果を文字列と連結して出力しています。

作成が完了したら、最後にデリミタを元の「;」に戻しておきましょう。

ストアドプロシージャの呼び出し方

作成したプロシージャは、CALLコマンドで実行できます。

mysql> call square_demo(15);

実行結果

+-----------------------+
| Output                |
+-----------------------+
| Your Square Value=225 |
+-----------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

引数として渡した15の2乗である「225」が正しく出力されました。このように、DECLAREで宣言した変数は、SET文で値を代入し、SELECTや計算式の中で自由に利用できます。

まとめ

  • DECLAREはストアドプロシージャ・ファンクション内でのみ使用可能
  • 宣言はBEGINブロックの先頭に記述する
  • 値の代入にはSET文を使う
  • CALLコマンドでプロシージャを実行できる

変数を活用することで、より柔軟で再利用性の高いストアドプロシージャを作成できます。ぜひ実際に試してみてください。

  1. MySQL Workbenchでストアドプロシージャを作成・実行する方法

    MySQL Workbenchでストアドプロシージャを作成する手順 まずは、ストアドプロシージャを作成してみましょう。以下は、MySQL Workbenchを使用してストアドプロシージャを作成するためのクエリ例です。 use business; DELIMITER // DROP PROCEDURE IF EXISTS SP_GETMESSAGE; CREATE PROCEDURE SP_GETMESSAGE() BEGIN DECLARE MESSAGE VARCHAR(100); SET MESSAGE="HELLO"; SELECT CONCAT(MESSAGE, ,

  2. MySQLストアドプロシージャでSHOW CREATE TABLEを実行する方法

    MySQLストアドプロシージャでSHOW CREATE TABLEを実行する方法 ストアドプロシージャの中でSHOW CREATE TABLEを実行したい場合は、動的SQL(プリペアドステートメント)を利用します。SHOW系のコマンドはプロシージャ内に直接記述できないため、SQL文を文字列として組み立てて実行するのがポイントです。 まずはサンプル用のテーブルを作成しましょう。 mysql> create table DemoTable2011 -> ( -> StudentId int NOT NULL AUTO_INCREMENT, -> St