指摘事項の対応

This commit is contained in:
mori.k 2025-05-21 17:49:26 +09:00
parent 44764a7a26
commit b6e3252dac

View File

@ -2,112 +2,69 @@
-- $$から始まる文字は後からREPLACEする文字を示す独自ルール -- $$から始まる文字は後からREPLACEする文字を示す独自ルール
-- 当プロシージャは、同一セッション内での並列処理を実行することができない -- 当プロシージャは、同一セッション内での並列処理を実行することができない
-- 実行者の権限でストアドプロシージャを実行するために、「SQL SECURITY INVOKER」を付与している -- 実行者の権限でストアドプロシージャを実行するために、「SQL SECURITY INVOKER」を付与している
CREATE PROCEDURE `internal07`.`upsert_jskult_batch_status_manage`(process_name varchar(100), process_type varchar(50), process_status varchar(50), total_run_count INT, max_run_count_flg TINYINT(1)) CREATE PROCEDURE `internal07`.`upsert_jskult_batch_status_manage`(
process_name varchar(100),
process_type varchar(50),
process_status varchar(50),
total_run_count INT,
max_run_count_flg TINYINT(1)
)
SQL SECURITY INVOKER
BEGIN
-- エラー処理 -- エラー処理
DECLARE EXIT HANDLER FOR SQLEXCEPTION DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN BEGIN
GET DIAGNOSTICS CONDITION 1 GET DIAGNOSTICS CONDITION 1
@error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT;
ROLLBACK; ROLLBACK;
SET @error_msg = ( SET @error_msg = (
CASE CASE
WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...')
ELSE @error_msg ELSE @error_msg
END END
); );
SIGNAL SQLSTATE '45000' SIGNAL SQLSTATE '45000'
SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg;
END; END;
SQL SECURITY INVOKER
BEGIN
START TRANSACTION; START TRANSACTION;
-- UPSERT STATEMENT設定 -- UPSERT STATEMENT設定
SET @upsert_statement = SET @upsert_statement =
'INSERT INTO src07.jskult_batch_status_manage 'INSERT INTO internal07.jskult_batch_status_manage(
(process_name, process_date, process_type, process_status, total_run_count,max_run_count_flg, process_name, process_date, process_type, process_status,
ins_user, ins_date, upd_user, upd_date) total_run_count,max_run_count_flg,
ins_user, ins_date, upd_user, upd_date
)
VALUES( VALUES(
(?, ?, ?, ?, ?, ?, ?, src07.get_syor_date(),?, ?,
ins_user = CURRENT_USER(), ins_date = CURRENT_TIMESTAMP(), NULL, NULL) IFNULL(?, 0),
IFNULL(?, 0),
CURRENT_USER(), CURRENT_TIMESTAMP(), NULL, NULL
)
ON DUPLICATE KEY UPDATE ON DUPLICATE KEY UPDATE
process_type = ?, process_type = CASE WHEN ? is NULL THEN process_type ELSE ? END,
process_status = ?, process_status = CASE WHEN ? is NULL THEN process_status ELSE ? END,
total_run_count = ?, total_run_count = CASE WHEN ? is NULL THEN total_run_count ELSE ? END,
max_run_count_flg = ?, max_run_count_flg = CASE WHEN ? is NULL THEN max_run_count_flg ELSE ? END,
upd_user = CURRENT_USER(), upd_user = CURRENT_USER(),
upd_date = CURRENT_TIMESTAMP();'; upd_date = CURRENT_TIMESTAMP();';
-- 日付テーブルから処理年月日を取得 SET @process_name = process_name;
SET @select_process_date_statement = 'SELECT syor_date INTO get_value FROM src07.hdke_tbl'; SET @process_type = process_type;
SET @process_status = process_status;
PREPARE stmt FROM @select_process_date_statement; SET @total_run_count = total_run_count;
EXECUTE stmt: SET @max_run_count_flg = max_run_count_flg;
DEALLOCATE PREPARE stmt;
SET @insert_process_date = get_value;
-- INSERT時に引数がNULLであるとき0を設定
SET @insert_total_run_count = IFNULL(total_run_count, 0);
SET @insert_max_run_count_flg = IFNULL(max_run_count_flg, 0);
-- 引数がNULLであるときに更新前の値を取得するためのステートメント設定
SET @select_statement_base = 'SELECT $$select_column$$ INTO get_value FROM src07.jskult_batch_status_manage WHERE process_name = ?'
-- UPDATE時にprocess_typeがNULLであるとき更新前の値を設定
IF process_type = NULL
SET @select_statement = REPLACE(@select_statement_base, "$$select_column$$", "process_type");
PREPARE stmt FROM @select_statement;
EXECUTE stmt USING @process_name;
DEALLOCATE PREPARE stmt;
SET @update_process_type = get_value;
ELSE
SET @update_process_type = process_type;
END IF;
-- UPDATE時にprocess_statusがNULLであるとき更新前の値を設定
IF process_status = NULL
SET @select_statement = REPLACE(@select_statement_base, "$$select_column$$", "process_status");
PREPARE stmt FROM @select_statement;
EXECUTE stmt USING @process_name;
DEALLOCATE PREPARE stmt;
SET @update_process_status = get_value;
ELSE
SET @update_process_status = process_status;
END IF;
-- UPDATE時にtotal_run_countがNULLであるとき更新前の値を設定
IF total_run_count = NULL
SET @select_statement = REPLACE(@select_statement_base, "$$select_column$$","total_run_count");
PREPARE stmt FROM @select_statement;
EXECUTE stmt USING @process_name;
DEALLOCATE PREPARE stmt;
SET @update_total_run_count = get_value
ELSE
SET @update_total_run_count = total_run_count;
END IF;
-- UPDATE時にmax_run_count_flgがNULLであるとき更新前の値を設定
IF max_run_count_flg = NULL
SET @select_statement = REPLACE(@select_statement_base, "$$select_column$$","max_run_count_flg");
PREPARE stmt FROM @select_statement;
EXECUTE stmt USING @process_name;
DEALLOCATE PREPARE stmt;
SET @update_max_run_count_flg = get_value;
ELSE
SET @update_max_run_count_flg = max_run_count_flg;
END IF;
-- UPSERT実行 -- UPSERT実行
PREPARE stmt FROM @upsert_statement; PREPARE stmt FROM @upsert_statement;
EXECUTE stmt USING @process_name, @insert_process_date , @process_type, @process_status, @insert_total_run_count, @insert_max_run_count_flg, @update_process_type, @update_process_status, @update_total_run_count, @update_max_run_count_flg; EXECUTE stmt USING
@process_name, @process_type, @process_status, @total_run_count, @max_run_count_flg,
@process_type, @process_type, @process_status, @process_status, @total_run_count, @total_run_count, @max_run_count_flg, @max_run_count_flg;
DEALLOCATE PREPARE stmt; DEALLOCATE PREPARE stmt;
COMMIT; COMMIT;
END END;