こんにちは、データベースを更新する必要があるときにいつでも実行できるmysqlスクリプトを作成しようとしています。スクリプトはテーブルを作成し、いくつかのストアドプロシージャを実行します。
DELIMITER $$
CREATE TABLE IF NOT EXISTS tbl_name (
col1 bigint(20) NOT NULL AUTO_INCREMENT,
col2 varchar(255) NOT NULL,
col3 varchar(64) NOT NULL,
col4 datetime DEFAULT NULL,
PRIMARY KEY (`col1 `),
UNIQUE KEY col2 (`col2`)
) ENGINE=InnoDB AUTO_INCREMENT=572 DEFAULT CHARSET=utf8$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `myproc`(IN username
VARCHAR(255))
BEGIN
DECLARE var1 VARCHAR(64);
DECLARE expirationDate DATETIME;
SET var1 = 12345;
SET expirationDate = DATE_ADD(NOW(), INTERVAL 30 SECOND);
REPLACE INTO tbl_name (col2, col3, col4) VALUES (someval, var1, expirationDate);
END$$
DELIMITER ;
スクリプトを初めて実行したとき、テーブルを作成し、MySQL Workbenchでストアドプロシージャを実行しました。 2回目に同じことを実行すると、エラー1304プロシージャが既に存在します。
オンラインで見た こちら プロシージャを削除してから、再度作成する。しかし、プロシージャを作成する前に以下のコマンドを入力すると、コード1064のCREATE
コマンドでエラーが発生しました。
DROP PROCEDURE IF EXISTS myproc;
CREATE DEFINER=`root`@`localhost` PROCEDURE `myproc`(IN username
VARCHAR(255))
.
.
.
私はmysqlを初めて使用しますが、プロシージャが既に存在する場合の実行方法がわかりません。
任意の助けをいただければ幸いです。
DELIMITER $$
に変更したため、元に戻すまで、各ステートメントの最後にその区切り文字を使用する必要があります。
DROP PROCEDUREとCREATE PROCEDUREは別々のステートメントであり、それぞれに独自のステートメント区切り文字が必要です。
DROP PROCEDURE IF EXISTS myproc $$
上記の行の終わりにある区切り文字に注意してください。
CREATE DEFINER=`root`@`localhost` PROCEDURE `myproc`(IN username
VARCHAR(255))
.
.
.
END $$
そして、CREATE PROCEDUREステートメント全体の最後にある別の区切り文字。