Med standardförordet att det inte är så du verkligen skulle göra sånt här i den verkliga världen...
Du skulle realistiskt sett behöva använda en utlösare på uttalandenivå här. Om du inte har något emot prestandaträffen med att kontrollera varje rum varje gång
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;
Om du inte vill kontrollera detta för varje rum varje gång, skulle du behöva ett paket med en samling rid
värden, en before-satsutlösare som initierade samlingen och en utlösare på radnivå som lade till :new.rid
värde för samlingen. Din efterutlösare skulle sedan iterera över elementen i samlingen och kontrollera antalet personer i just dessa rum.