Med standardforordet, at det ikke er sådan, du virkelig ville gøre den slags ting i den virkelige verden...
Du ville realistisk set skulle bruge en udløser på statement-niveau her. Hvis du ikke har noget imod det præstationsmæssige hit ved at tjekke hvert værelse hver gang
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;
Hvis du ikke vil tjekke dette for hvert værelse hver gang, skal du have en pakke med en samling af rid
værdier, en før-sætningsudløser, der initialiserede samlingen, og en trigger på rækkeniveau, der tilføjede :new.rid
værdi for samlingen. Din efterudsagnsudløser ville derefter gentage elementerne i samlingen og kontrollere antallet af personer i netop disse rum.