refactor:並列処理できないコメント追加、例外で使用するユーザ変数の初期化、$$終端文字の追加
This commit is contained in:
parent
c62db70d9a
commit
805dfb26de
@ -1,5 +1,6 @@
|
||||
-- A5M2で実行時にSQL区切り文字を「;」以外にすること
|
||||
-- $$から始まる文字は後からREPLACEする文字を示す独自ルール
|
||||
-- $$から始まり$$で終わる文字は後からREPLACEする文字を示す独自ルール
|
||||
-- crm_historyストアドプロシージャは、同一セッション内での並列処理を実行することができない
|
||||
CREATE PROCEDURE crm_history(target_table VARCHAR(255), target_column VARCHAR(255))
|
||||
BEGIN
|
||||
-- 例外処理
|
||||
@ -15,21 +16,22 @@ BEGIN
|
||||
SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg;
|
||||
END;
|
||||
|
||||
SET @error_state = NULL, @error_msg = NULL;
|
||||
START TRANSACTION;
|
||||
|
||||
-- ②-3で利用する一時テーブル削除のSQLを準備
|
||||
-- 例外処理でも利用するため先に記述
|
||||
SET @drop_tmp_table = '
|
||||
DROP TEMPORARY TABLE IF EXISTS $$target_table_make_history_tmp
|
||||
DROP TEMPORARY TABLE IF EXISTS $$target_table$$_make_history_tmp
|
||||
';
|
||||
SET @drop_tmp_table = REPLACE(@drop_tmp_table, "$$target_table", target_table);
|
||||
SET @drop_tmp_table = REPLACE(@drop_tmp_table, "$$target_table$$", target_table);
|
||||
PREPARE drop_tmp_table_stmt from @drop_tmp_table;
|
||||
|
||||
-- ①-1 Salesforce側で更新されたデータの適用開始日時と適用終了日時を設定する
|
||||
SET @new_history_save = '
|
||||
UPDATE $$target_table
|
||||
UPDATE $$target_table$$
|
||||
SET
|
||||
start_datetime = $$target_column
|
||||
start_datetime = $$target_column$$
|
||||
, end_datetime = "9999-12-31 00:00:00"
|
||||
, upd_user = CURRENT_USER()
|
||||
, upd_date = CURRENT_TIMESTAMP()
|
||||
@ -37,21 +39,21 @@ BEGIN
|
||||
start_datetime IS NULL
|
||||
AND end_datetime IS NULL
|
||||
';
|
||||
SET @new_history_save = REPLACE(@new_history_save, "$$target_table", target_table);
|
||||
SET @new_history_save = REPLACE(@new_history_save, "$$target_column", target_column);
|
||||
SET @new_history_save = REPLACE(@new_history_save, "$$target_table$$", target_table);
|
||||
SET @new_history_save = REPLACE(@new_history_save, "$$target_column$$", target_column);
|
||||
PREPARE new_history_save_stmt from @new_history_save;
|
||||
EXECUTE new_history_save_stmt;
|
||||
DEALLOCATE PREPARE new_history_save_stmt;
|
||||
|
||||
-- ②-1 Salesforce側で更新されたデータを検出用一時テーブルの作成
|
||||
SET @make_history_tmp_create = '
|
||||
CREATE TEMPORARY TABLE $$target_table_make_history_tmp
|
||||
CREATE TEMPORARY TABLE $$target_table$$_make_history_tmp
|
||||
SELECT
|
||||
id
|
||||
, MIN($$target_column) AS min_start_datetime
|
||||
, MIN($$target_column$$) AS min_start_datetime
|
||||
, MAX(start_datetime) AS max_start_datetime
|
||||
FROM
|
||||
$$target_table
|
||||
$$target_table$$
|
||||
WHERE
|
||||
end_datetime = "9999-12-31 00:00:00"
|
||||
GROUP BY
|
||||
@ -59,16 +61,16 @@ BEGIN
|
||||
HAVING
|
||||
count(id) = 2
|
||||
';
|
||||
SET @make_history_tmp_create = REPLACE(@make_history_tmp_create, "$$target_table", target_table);
|
||||
SET @make_history_tmp_create = REPLACE(@make_history_tmp_create, "$$target_column", target_column);
|
||||
SET @make_history_tmp_create = REPLACE(@make_history_tmp_create, "$$target_table$$", target_table);
|
||||
SET @make_history_tmp_create = REPLACE(@make_history_tmp_create, "$$target_column$$", target_column);
|
||||
PREPARE make_history_tmp_create_stmt from @make_history_tmp_create;
|
||||
EXECUTE make_history_tmp_create_stmt;
|
||||
DEALLOCATE PREPARE make_history_tmp_create_stmt;
|
||||
|
||||
-- ②-2 「②-1」で取得した全件に更新処理を行う
|
||||
SET @update_end_datetime = '
|
||||
UPDATE $$target_table tt
|
||||
LEFT JOIN $$target_table_make_history_tmp mht
|
||||
UPDATE $$target_table$$ tt
|
||||
LEFT JOIN $$target_table$$_make_history_tmp mht
|
||||
ON tt.id = mht.id
|
||||
AND tt.start_datetime = mht.min_start_datetime
|
||||
SET
|
||||
@ -78,8 +80,8 @@ BEGIN
|
||||
WHERE
|
||||
mht.id IS NOT NULL
|
||||
';
|
||||
SET @update_end_datetime = REPLACE(@update_end_datetime, "$$target_table", target_table);
|
||||
SET @update_end_datetime = REPLACE(@update_end_datetime, "$$target_column", target_column);
|
||||
SET @update_end_datetime = REPLACE(@update_end_datetime, "$$target_table$$", target_table);
|
||||
SET @update_end_datetime = REPLACE(@update_end_datetime, "$$target_column$$", target_column);
|
||||
PREPARE update_end_datetime_stmt from @update_end_datetime;
|
||||
EXECUTE update_end_datetime_stmt;
|
||||
DEALLOCATE PREPARE update_end_datetime_stmt;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user