sql >> Databáze >  >> RDS >> Oracle

Oracle - Jak přinutit uživatele VLOŽIT více řádků

Se standardní předmluvou, že takhle byste něco takového ve skutečném světě opravdu nedělali...

Zde byste reálně museli použít spouštěč na úrovni příkazu. Pokud vám nevadí výkonnostní hit pokaždé zkontrolovat každou místnost

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;

Pokud to nechcete pokaždé kontrolovat pro každou místnost, budete potřebovat balíček s kolekcí rid hodnoty, spouštěč příkazu before, který inicializoval kolekci, a spouštěč na úrovni řádku, který přidal :new.rid hodnotu do sbírky. Váš spouštěč příkazu after by pak iteroval přes prvky v kolekci a zkontroloval počet lidí pouze v těchto místnostech.




  1. CREATE SCHEMA IF NOT EXISTS vyvolá chybu duplicitního klíče

  2. ORA-03113:konec souboru na komunikačním kanálu po dlouhé nečinnosti v aplikaci ASP.Net

  3. INSERT INTO, pokud je splněna podmínka

  4. PLS-00201:Musí být deklarován identifikátor UTIL_FILE