feat:例外をスローするように追記

This commit is contained in:
daido 2023-10-17 14:13:42 +09:00
parent 73783114b4
commit 14eaa37dc3

View File

@ -1,21 +1,18 @@
CREATE FUNCTION `get_distribution_to_schema`(target_table VARCHAR(255), target_column VARCHAR(255), target_column_value VARCHAR(255))
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;
DECLARE distribution_schema_other VARCHAR(20);
DECLARE value_table_id VARCHAR(100);
DECLARE value_from_column_id VARCHAR(100);
DECLARE value_from_column_value VARCHAR(100);
DECLARE value_to_schema VARCHAR(20);
-- カーソルがデータセットの最後に達したか判定するための変数を宣言
-- カーソルがデータセットの最後に達したか判定するための変数
DECLARE done INT DEFAULT FALSE;
-- カーソルを定義
DECLARE myCursor CURSOR FOR
SELECT `table_id`, `from_column_id`, `from_column_value`, `to_schema`
DECLARE cursor_crm_data_distribution_settings CURSOR FOR
SELECT `from_column_value`, `to_schema`
FROM `crm_data_distribution_settings`
WHERE `table_id` = target_table
AND `from_column_id` = target_column;
@ -23,13 +20,10 @@ BEGIN
-- カーソルがデータセットの最後に達したときの動作を制御
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- カーソルをオープン
OPEN myCursor;
OPEN cursor_crm_data_distribution_settings;
-- ループで1行ずつ処理
read_loop: LOOP
-- カーソルから1行読み出し
FETCH myCursor INTO value_table_id, value_from_column_id, value_from_column_value, value_to_schema;
FETCH cursor_crm_data_distribution_settings INTO value_from_column_value, value_to_schema;
-- カーソルからの読み出しが最後に達していればループを抜ける
IF done THEN
@ -40,16 +34,24 @@ BEGIN
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 myCursor;
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 = NULL THEN
IF ret IS NULL THEN
SET ret = distribution_schema_other;
END IF;