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

MySQL 逆引きリファレンス

対応方法:ERROR 1304 (42000): PROCEDURE プロシージャ名 already exists

スポンサードリンク

プロシージャを作成しようとした際にこのエラーが出る場合、CREATE PROCEDURE で指定したプロシージャ名と同じ名前のプロシージャがすでに存在しています。

もし作成するプロシージャの名前に誤りがなく、プロシージャを作成するデータベースも正しい場合、新しいストアドプロシージャを作成する前に、既存のストアドプロシージャを削除する必要があります。(プロシージャ名やデータベースが間違っている場合はそちらを修正してください。)

既存のプロシージャを削除するには DROP PROCEDURE プロシージャ名 を使用します。対応例は次の通りです。

mysql> DELIMITER //
mysql> CREATE PROCEDURE testproc2(INOUT prmInOut INT)
    -> BEGIN
    ->   SET prmInOut = prmInOut + 1234;
    -> END
    -> //
ERROR 1304 (42000): PROCEDURE testproc2 already exists  ← エラー発生 
mysql> DELIMITER ;
mysql> DROP PROCEDURE testproc2;  ← 既存のプロシージャを削除 
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER //
mysql> CREATE PROCEDURE testproc2(INOUT prmInOut INT)
    -> BEGIN
    ->   SET prmInOut = prmInOut + 1234;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)  ← 作成成功 

mysql> DELIMITER ;
mysql>

事前に同じ名前のストアドプロシージャが登録されていないかを確認する方法については、次の関連ページを参照してください。

スポンサードリンク

ストアドプロシージャ

その他のカテゴリー一覧