diff --git a/rds_mysql/stored_procedure/internal02/get_distribution_to_schema.sql b/rds_mysql/stored_procedure/internal02/get_distribution_to_schema.sql new file mode 100644 index 00000000..745b0dbe --- /dev/null +++ b/rds_mysql/stored_procedure/internal02/get_distribution_to_schema.sql @@ -0,0 +1,57 @@ +CREATE FUNCTION `get_distribution_to_schema`(target_table VARCHAR(255), target_column VARCHAR(255), target_column_value VARCHAR(255)) +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` + FROM `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 myCursor; + + -- ループで1行ずつ処理 + read_loop: LOOP + -- カーソルから1行読み出し + FETCH myCursor INTO value_table_id, value_from_column_id, 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; + + IF value_from_column_value = 'other' THEN + SET distribution_schema_other = value_to_schema; + END IF; + + END LOOP; + + -- カーソルを閉じる + CLOSE myCursor; + + IF ret = NULL THEN + SET ret = distribution_schema_other; + END IF; + + RETURN ret; +END