Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle - Comment forcer l'utilisateur à INSÉRER plusieurs lignes

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.