49 lines
1.9 KiB
SQL
49 lines
1.9 KiB
SQL
-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する
|
|
-- $$から始まる文字は後からREPLACEする文字を示す独自ルール
|
|
-- crm_data_syncストアドプロシージャは、同一セッション内での並列処理を実行することができない
|
|
-- 実行者の権限でストアドプロシージャを実行するために、「SQL SECURITY INVOKER」を付与している
|
|
CREATE PROCEDURE src02.crm_data_sync(target_table VARCHAR(255), target_table_all VARCHAR(255), target_column VARCHAR(255))
|
|
SQL SECURITY INVOKER
|
|
BEGIN
|
|
-- 例外処理
|
|
-- エラーが発生した場合に一時テーブルの削除を実施
|
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
|
BEGIN
|
|
GET DIAGNOSTICS CONDITION 1
|
|
@error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT;
|
|
ROLLBACK;
|
|
SIGNAL SQLSTATE '45000'
|
|
SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg;
|
|
END;
|
|
|
|
SET @error_state = NULL, @error_msg = NULL;
|
|
START TRANSACTION;
|
|
|
|
-- ①-1 Salesforce側で物理削除されたデータを検出し更新する
|
|
SET @update_end_datetime = '
|
|
UPDATE $$target_table$$ tt
|
|
SET
|
|
tt.end_datetime = CURRENT_TIMESTAMP ()
|
|
, tt.upd_user = CURRENT_USER ()
|
|
, tt.upd_date = CURRENT_TIMESTAMP ()
|
|
WHERE
|
|
tt.end_datetime = "9999-12-31 00:00:00"
|
|
AND NOT EXISTS (
|
|
SELECT
|
|
tta.Id
|
|
FROM
|
|
$$target_table_all$$ tta
|
|
WHERE
|
|
tt.Id = tta.Id
|
|
AND tt.$$target_column$$ = tta.$$target_column$$
|
|
)
|
|
';
|
|
SET @update_end_datetime = REPLACE(@update_end_datetime, "$$target_table$$", target_table);
|
|
SET @update_end_datetime = REPLACE(@update_end_datetime, "$$target_table_all$$", target_table_all);
|
|
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;
|
|
|
|
COMMIT;
|
|
END
|