sql >> Base de Datos >  >> RDS >> Oracle

Oracle:cómo obligar al usuario a INSERTAR varias filas

Con el prefacio estándar de que así no es como harías este tipo de cosas en el mundo real...

De manera realista, necesitaría usar un disparador de nivel de declaración aquí. Si no le importa el impacto en el rendimiento de revisar cada habitación cada vez

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 no desea verificar esto para cada habitación cada vez, necesitaría un paquete con una colección de rid valores, un disparador de declaración anterior que inicializó la colección y un disparador de nivel de fila que agregó el :new.rid valor a la colección. Su activador de declaración posterior iteraría sobre los elementos de la colección y verificaría la cantidad de personas en solo esas habitaciones.