Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle - Come forzare l'utente a INSERIRE più righe

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.