diff --git a/db_assets/sql_scripts/seed_treatment_schemes.sql b/db_assets/sql_scripts/seed_treatment_schemes.sql new file mode 100644 index 0000000..b9b4817 --- /dev/null +++ b/db_assets/sql_scripts/seed_treatment_schemes.sql @@ -0,0 +1,63 @@ +DELIMITER $$ + +CREATE PROCEDURE `up_and_down`.`fill_treatment_schemes`() +BEGIN + DECLARE done INT DEFAULT 0; + DECLARE v_uts_uuid CHAR(36); + DECLARE v_user_uuid CHAR(36); + DECLARE v_count INT; + DECLARE v_i INT; + DECLARE v_med_uuid CHAR(36); + + -- курсор по всем схемам лечения пользователей + DECLARE cur CURSOR FOR +SELECT uuid, user_uuid +FROM `up_and_down`.`user_treatment_schemes`; + +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; + +OPEN cur; + +read_loop: LOOP + FETCH cur INTO v_uts_uuid, v_user_uuid; + IF done = 1 THEN + LEAVE read_loop; +END IF; + + -- случайное количество препаратов от 1 до 5 + SET v_count = FLOOR(RAND() * 5) + 1; + SET v_i = 0; + + meds_loop: WHILE v_i < v_count DO + -- случайный препарат из уже существующих medications +SELECT m.uuid +INTO v_med_uuid +FROM `up_and_down`.`medications` m +ORDER BY RAND() + LIMIT 1; + +-- чтобы не было дублей (один и тот же препарат в одной схеме) +IF NOT EXISTS ( + SELECT 1 + FROM `up_and_down`.`treatment_schemes` ts + WHERE ts.user_treatment_schemes_uuid = v_uts_uuid + AND ts.medication_uuid = v_med_uuid + ) THEN + INSERT INTO `up_and_down`.`treatment_schemes` ( + `user_treatment_schemes_uuid`, + `medication_uuid` + ) VALUES ( + v_uts_uuid, + v_med_uuid + ); + SET v_i = v_i + 1; +END IF; +END WHILE; +END LOOP; + +CLOSE cur; +END$$ + +DELIMITER ; + +CALL `up_and_down`.`fill_treatment_schemes`();