指摘事項の対応
This commit is contained in:
parent
44764a7a26
commit
b6e3252dac
@ -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;
|
||||||
Loading…
x
Reference in New Issue
Block a user