BD
BD
--3) Trigger pentru a actualiza numărul de locuri disponibile din Salon după
inserarea unui pacient
CREATE OR REPLACE FUNCTION update_locuri_salon()
RETURNS TRIGGER AS $$
BEGIN
UPDATE Salon
SET nr_locuri = nr_locuri - 1
WHERE id_salon = NEW.id_salon;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
--4) Trigger pentru a verifica dacă un pacient are un istoric valid înainte de
inserarea unui nou pacient
CREATE OR REPLACE FUNCTION check_pacient_istoric()
RETURNS TRIGGER AS $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM Istoric_pacient WHERE id_istoric = NEW.id_istoric)
THEN
RAISE EXCEPTION 'Istoricul pacientului nu există!';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
--5) Trigger pentru a actualiza numărul de medici dintr-o secție după inserarea
unui nou angajat
CREATE OR REPLACE FUNCTION update_numar_medici()
RETURNS TRIGGER AS $$
BEGIN
UPDATE Sectie
SET nr_medici = nr_medici + 1
WHERE id_sectie = NEW.id_sectie;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
--6) Trigger pentru a verifica și șterge pacientul dacă nu mai există în tabelul
Istoric_pacient
CREATE OR REPLACE FUNCTION delete_pacient_if_no_istoric()
RETURNS TRIGGER AS $$
BEGIN
DELETE FROM Pacient WHERE id_istoric IS NULL;
RETURN OLD;
END;
$$ LANGUAGE plpgsql;
--7) Trigger pentru a preveni ștergerea unui medicament care este în utilizare
(într-un tratament)
CREATE OR REPLACE FUNCTION prevent_delete_medicament_in_tratament()
RETURNS TRIGGER AS $$
BEGIN
IF EXISTS (SELECT 1 FROM Detalii_tratament WHERE id_medicament =
OLD.id_medicament) THEN
RAISE EXCEPTION 'Medicamentul este utilizat într-un tratament și nu poate
fi șters!';
END IF;
RETURN OLD;
END;
$$ LANGUAGE plpgsql;
--8) Trigger pentru a actualiza statusul unui pacient în funcție de data externării
CREATE OR REPLACE FUNCTION update_data_externare()
RETURNS TRIGGER AS $$
BEGIN
NEW.data_externare := CURRENT_DATE;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
--9) Trigger pentru a preveni inserarea unui pacient cu aceeași dată de naștere ca
un alt pacient
CREATE OR REPLACE FUNCTION prevent_duplicate_birthdate()
RETURNS TRIGGER AS $$
BEGIN
IF EXISTS (SELECT 1 FROM Pacient WHERE data_nastere_pacient =
NEW.data_nastere_pacient) THEN
RAISE EXCEPTION 'Există deja un pacient cu această dată de naștere!';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;