PHP で MySQL を操作するのに役立つリファレンス

MySQL FAQ

ストアドプロシージャのローカル変数の初期値は何ですか?

スポンサードリンク

DEFAULT 句で初期値を指定しない場合は NULL で初期化されます。
DEFAULT 句で初期値を指定している場合は指定した値で初期化されます。

MySQL のストアドプロシージャやストアドファンクションで、その処理内のみで有効なローカル変数を宣言する際に、 DEFAULT 句で初期値を指定しない場合、ローカル変数は NULL で初期化されます。DEFAULT 句で初期値を指定した場合は、それぞれ DEFAULT 句で指定した値で初期化します。

尚、TIMESTAMP 型はテーブルのカラムとして使用する場合は、NULL で INSERT すると実行日時が初期値としてセットされますが、ローカル変数のデータ型として使用する場合、他のデータ型と同様に初期値として NULL がセットされます。

それでは実際にコードを実行して確認してみます。まずは DEFAULT 句で初期値を指定しない例です。

サンプルコード(DEFAULT 句で初期値を指定しない)
DELIMITER //
CREATE PROCEDURE testproc()
BEGIN
  DECLARE var_int1 INT;
  DECLARE var_text1 TEXT;
  DECLARE var_date1 DATE;
  DECLARE var_timestamp1 TIMESTAMP;
  
  SELECT var_int1;
  SELECT var_text1;
  SELECT var_date1;
  SELECT var_timestamp1;
END
//
DELIMITER ;

上記を実行した結果は次の通りです。

mysql> CALL testproc();
+----------+
| var_int1 |
+----------+
|     NULL |
+----------+
1 row in set (0.00 sec)

+-----------+
| var_text1 |
+-----------+
| NULL      |
+-----------+
1 row in set (0.00 sec)

+-----------+
| var_date1 |
+-----------+
| NULL      |
+-----------+
1 row in set (0.01 sec)

+----------------+
| var_timestamp1 |
+----------------+
| NULL           |
+----------------+
1 row in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

mysql>

続いて、DEFAULT 句で初期値を指定した場合の例です。 DEFAULT 句では関数を使用することもできます。

サンプルコード(DEFAULT 句で初期値を指定する)
DELIMITER //
CREATE PROCEDURE testproc()
BEGIN
  DECLARE var_int1 INT DEFAULT 35;
  DECLARE var_text1 TEXT DEFAULT 'MySQL';
  DECLARE var_date1 DATE DEFAULT '2020-04-01';
  DECLARE var_timestamp1 TIMESTAMP DEFAULT NOW();
  
  SELECT var_int1;
  SELECT var_text1;
  SELECT var_date1;
  SELECT var_timestamp1;
END
//
DELIMITER ;

上記を実行した結果は次の通りです。

mysql> CALL testproc();
+----------+
| var_int1 |
+----------+
|       35 |
+----------+
1 row in set (0.00 sec)

+-----------+
| var_text1 |
+-----------+
| MySQL     |
+-----------+
1 row in set (0.00 sec)

+------------+
| var_date1  |
+------------+
| 2020-04-01 |
+------------+
1 row in set (0.01 sec)

+---------------------+
| var_timestamp1      |
+---------------------+
| 2014-12-16 00:43:22 |
+---------------------+
1 row in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

mysql>
スポンサードリンク

ストアドプロシージャ・ファンクション

その他のカテゴリー一覧