Avec la préface standard que ce n'est pas comme ça que vous feriez vraiment ce genre de chose dans le monde réel...
De manière réaliste, vous auriez besoin d'utiliser ici un déclencheur au niveau de l'instruction. Si vous ne vous souciez pas de la performance de vérifier chaque pièce à chaque fois
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;
Si vous ne voulez pas vérifier cela pour chaque pièce à chaque fois, vous aurez besoin d'un package avec une collection de rid
valeurs, un déclencheur d'instruction avant qui a initialisé la collection et un déclencheur au niveau de la ligne qui a ajouté le :new.rid
valeur à la collection. Votre déclencheur d'instruction après parcourra ensuite les éléments de la collection et vérifiera le nombre de personnes dans ces pièces uniquement.