diff --git a/rds_mysql/stored_procedure/internal02/get_distribution_to_schema.sql b/rds_mysql/stored_procedure/internal02/get_distribution_to_schema.sql index 745b0dbe..a94b233d 100644 --- a/rds_mysql/stored_procedure/internal02/get_distribution_to_schema.sql +++ b/rds_mysql/stored_procedure/internal02/get_distribution_to_schema.sql @@ -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;