Merge pull request #285 feature-NEWDWH2021-1273 into develop-4-crm-medical

This commit is contained in:
朝倉 明日香 2023-10-18 10:00:53 +09:00
commit 8f522fca7d

View File

@ -0,0 +1,66 @@
-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する
-- $$から始まる文字は後からREPLACEする文字を示す独自ルール
CREATE FUNCTION `get_distribution_to_schema`(target_table VARCHAR(100), target_column VARCHAR(100), target_column_value VARCHAR(100))
RETURNS VARCHAR(20)
DETERMINISTIC
BEGIN
-- 返却値
DECLARE ret VARCHAR(20) DEFAULT NULL;
-- other振分先蓄積スキーマ
DECLARE distribution_schema_other VARCHAR(20) DEFAULT NULL;
-- 振分判断項目値
DECLARE value_from_column_value VARCHAR(100) DEFAULT NULL;
-- 振分先蓄積スキーマ
DECLARE value_to_schema VARCHAR(20) DEFAULT NULL;
-- カーソルがデータセットの最後に達したか判定するための変数
DECLARE done INT DEFAULT FALSE;
-- カーソル
DECLARE cursor_crm_data_distribution_settings CURSOR FOR
SELECT `from_column_value`, `to_schema`
FROM intenal02.`crm_data_distribution_settings`
WHERE `table_id` = target_table
AND `from_column_id` = target_column;
-- カーソルがデータセットをフェッチしきった時の動作を制御
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cursor_crm_data_distribution_settings;
read_loop: LOOP
FETCH cursor_crm_data_distribution_settings INTO value_from_column_value, value_to_schema;
-- カーソルの読み出しが完了していればループを抜ける
IF done THEN
LEAVE read_loop;
END IF;
IF value_from_column_value = target_column_value THEN
SET ret = value_to_schema;
END IF;
-- カーソルから読み出した行が'other'かを判断
IF value_from_column_value = 'other' THEN
SET distribution_schema_other = value_to_schema;
END IF;
END LOOP;
CLOSE cursor_crm_data_distribution_settings;
-- 例外処理
IF distribution_schema_other IS NULL THEN
SET @error_msg = 'データ振分設定テーブルにotherの設定がされていません。テーブルID: $$target_table$$, 振分判断項目ID: $$target_column$$';
SET @error_msg = REPLACE(@error_msg, "$$target_table$$", target_table);
SET @error_msg = REPLACE(@error_msg, "$$target_column$$", target_column);
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = @error_msg;
END IF;
IF ret IS NULL THEN
SET ret = distribution_schema_other;
END IF;
RETURN ret;
END