-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する CREATE PROCEDURE src05.sales_lau_delete(target_table VARCHAR(255), laundering_period_year INT) SQL SECURITY INVOKER BEGIN -- スキーマ名 DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'sales_lau_delete'; -- プロシージャの引数 DECLARE procedure_args JSON DEFAULT JSON_OBJECT('target_table', target_table, 'laundering_period_year', laundering_period_year); -- 例外処理 DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, 'sales_lau_deleteでエラーが発生', @error_state, @error_msg); SET @error_msg = ( CASE WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') ELSE @error_msg END ); SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; END; SET @error_state = NULL, @error_msg = NULL; CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)過去データ削除① 開始'); SET @delete_data = " DELETE FROM $$target_table$$ WHERE kjyo_ym < DATE_FORMAT((src05.get_syor_date() - INTERVAL ? YEAR), '%Y%m') "; SET @delete_data = REPLACE(@delete_data, "$$target_table$$", target_table); PREPARE delete_data_stmt from @delete_data; SET @interval_year = laundering_period_year; EXECUTE delete_data_stmt USING @interval_year; CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)過去データ削除① 終了'); END