Met het standaard voorwoord dat dit niet is hoe je dit soort dingen in de echte wereld zou doen...
U zou hier realistisch een trigger op instructieniveau moeten gebruiken. Als je de prestatiehit van het elke keer controleren van elke kamer niet erg vindt
CREATE OR REPLACE TRIGGER Living_AIUD
AFTER INSERT OR UPDATE OR DELETE
ON Living
DECLARE
Count NUMBER;
BEGIN
FOR x IN (SELECT rid, count(*) cnt
FROM living
GROUP BY rid
HAVING COUNT(*) < 3)
LOOP
RAISE_APPLICATION_ERROR(-20002, 'Too few people in room ' || x.rid);
END LOOP;
END Living_AIUD;
Als je dit niet elke keer voor elke kamer wilt controleren, heb je een pakket nodig met een verzameling van rid
waarden, een before-instructietrigger die de verzameling initialiseerde, en een trigger op rijniveau die de :new.rid
toevoegde waarde voor de collectie. Je trigger voor na de verklaring zou dan de elementen in de verzameling herhalen en het aantal mensen in alleen die kamers controleren.