49 lines
2.2 KiB
SQL

-- 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