やりたいこと
- テーブルにカラム追加するとき、そのカラムがないときだけカラム追加するようにしたい
-> 『Duplicate column name』エラーを無視したい - Flywayで実行するとき、カラム追加が上手くいってなければFailedにしたい
SQL
プロシージャを利用する。
alter_table.sql
DROP PROCEDURE IF EXISTS alter_table_procedure;
DELIMITER //
CREATE PROCEDURE alter_table_procedure()
BEGIN
/* SQLEXCEPTIONを無視するように設定 */
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
/* 以下のALTER TABLEで『Duplicate column name』エラーが発生してもプロシージャは正常終了する */
ALTER TABLE user ADD COLUMN age INT NULL AFTER name;
ALTER TABLE user ADD COLUMN address VARCHAR(50) NULL AFTER age;
END //
DELIMITER ;
CALL alter_table_procedure();
DROP PROCEDURE alter_table_procedure;
/* 追加対象のカラムをSELECTすることで、もしカラム追加できていなかったらエラーとなり
Flywayのhistoryはfailedとなる */
SELECT age, address FROM user;