MySQLでやりたいことから調べられるリファレンス

MySQL 逆引きリファレンス

対応方法:ERROR 1327 (42000): Undeclared variable: var1

スポンサードリンク

ストアドプロシージャやストアドファンクションを作成する際に、処理で変数を使用しているにも関わらず、変数を宣言なしで作成しようとすると ERROR 1327 (42000): Undeclared variable: 変数名 というエラーが発生します。

エラー発生例
mysql> DELIMITER ;
mysql> DELIMITER //
mysql> CREATE PROCEDURE test()
    -> BEGIN
    ->   SELECT 1 INTO var1;
    ->   SELECT var1;
    -> END
    -> //
ERROR 1327 (42000): Undeclared variable: var1
mysql> DELIMITER ;
mysql>

この場合、エラーメッセージに表示されている変数名を、処理で使用する前に宣言するようにします。

DELIMITER //
CREATE PROCEDURE test()
BEGIN
  /* 最初に var1 を使用する前に宣言する */
  DECLARE var1 INT;
  SELECT 1 INTO var1;
  SELECT var1;
END
//
DELIMITER ;

これで次の通りエラーは発生しなくなります。

mysql> DELIMITER //
mysql> CREATE PROCEDURE test()
    -> BEGIN
    ->   /* 最初に var1 を使用する前に宣言する */
    ->   DECLARE var1 INT;
    ->   SELECT 1 INTO var1;
    ->   SELECT var1;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)  ← エラーなしで登録できた 

mysql> DELIMITER ;
mysql> CALL test();  ← 実行時エラーもなし 
+------+
| var1 |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

mysql>
スポンサードリンク

ストアドプロシージャ

ストアドファンクション

その他のカテゴリー一覧