Se standardní předmluvou, že takhle byste něco takového ve skutečném světě opravdu nedělali...
Zde byste reálně museli použít spouštěč na úrovni příkazu. Pokud vám nevadí výkonnostní hit pokaždé zkontrolovat každou místnost
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;
Pokud to nechcete pokaždé kontrolovat pro každou místnost, budete potřebovat balíček s kolekcí rid
hodnoty, spouštěč příkazu before, který inicializoval kolekci, a spouštěč na úrovni řádku, který přidal :new.rid
hodnotu do sbírky. Váš spouštěč příkazu after by pak iteroval přes prvky v kolekci a zkontroloval počet lidí pouze v těchto místnostech.