Con la prefazione standard che non è così che faresti davvero questo genere di cose nel mondo reale...
Dovresti realisticamente utilizzare un trigger a livello di istruzione qui. Se non ti dispiace il successo delle prestazioni di controllare ogni stanza ogni volta
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;
Se non vuoi controllare questo per ogni stanza ogni volta, avresti bisogno di un pacchetto con una raccolta di rid
valori, un trigger dell'istruzione before che ha inizializzato la raccolta e un trigger a livello di riga che ha aggiunto il :new.rid
valore alla collezione. Il tuo trigger di istruzione after itera quindi sugli elementi nella raccolta e controlla il numero di persone solo in quelle stanze.