Я получил процедуру для таблицы сведений, в которой я удаляю записи пациентов без назначений (таблица termin
).Но теперь я хочу удалить строки из основной таблицы (patient
).
Я пробовал это с соединениями, но это не работает
DELIMITER $$
DROP PROCEDURE IF EXISTS delete_patients $$
CREATE PROCEDURE delete_patients ()
BEGIN
DECLARE v_patient_id INT(6); -- Variable für: ID des aktuellen Patienten
DECLARE v_patient_number INT(64); -- Variable für: Anzahl der Termine des aktuellen Patienten
DECLARE exit_loop BOOLEAN; -- Status, zeigt an ob alle Datensätze durchlaufen wurden
DECLARE select_cursor CURSOR FOR
SELECT patient_id
FROM patient; -- Holt alle Datensätze (Alle Patienten)
DECLARE CONTINUE HANDLER FOR NOT FOUND SET exit_loop = TRUE; -- Der Handler setzt den Status, wenn alle Datensätze (patienten) durchlaufen wurden.
OPEN select_cursor; -- Öffnet die Datensätze
select_loop: LOOP -- Startet den Durchlauf aller Datensätze
FETCH select_cursor INTO v_patient_id; -- Holt immer einen Datensatz (Patienten) und speichert die ID in v_patient_id
IF exit_loop THEN -- Gibt es kein Datensatz mehr, wird der Durchlauf beendet.
CLOSE select_cursor;
LEAVE select_loop;
END IF;
SELECT count(patient_id) INTO v_patient_number FROM termin WHERE patient_id = v_patient_id; -- Zählt die Termine und speichert die Anzahl in v_patient_number
IF v_patient_number = 0 THEN -- Sollte v_patient_id gleich 0 sein, also der Patient hat 0 Termine
DELETE FROM patient WHERE patient_id = v_patient_id; -- Der Patient wurd gelöscht
END IF;
END LOOP select_loop; -- Ende des Durchlaufs
END $$
DELIMITER ;