Files
UpAndDown/db_assets/sql_scripts/seed_treatment_schemes.sql
T
2025-12-07 12:23:55 +03:00

64 lines
1.7 KiB
SQL

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`();