Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle - So zwingen Sie den Benutzer, mehrere Zeilen einzufügen

Mit dem üblichen Vorwort, dass man so etwas in der realen Welt nicht wirklich machen würde...

Sie müssten hier realistischerweise einen Trigger auf Anweisungsebene verwenden. Wenn es Ihnen nichts ausmacht, jeden Raum jedes Mal zu überprüfen

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;

Wenn Sie dies nicht jedes Mal für jeden Raum überprüfen möchten, benötigen Sie ein Paket mit einer Sammlung von rid -Werte, einen Before-Statement-Trigger, der die Sammlung initialisiert hat, und einen Trigger auf Zeilenebene, der :new.rid hinzugefügt hat Wert für die Sammlung. Ihr After-Statement-Trigger würde dann die Elemente in der Sammlung durchlaufen und die Anzahl der Personen in genau diesen Räumen überprüfen.