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