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

Zabránit spouštění vložení

Poté, co jsem přednesl prezentaci na konferenci, jsem si popovídal s univerzitním lektorem, který vyučoval PL/SQL. Moje přednáška byla o dobré praxi PL/SQL; jeden z mých snímků jednoduše řekl "Nepoužívejte spouštěče". Lektor mi řekl, že je pro něj obtížné sladit takové rady s potřebami učebních osnov. Musí své studenty naučit veškerou syntaxi, ale připustil, že často zadávali úkoly, které vyžadovaly řešení, která bychom při profesionálním psaní softwaru nepoužili.

To je taková otázka. Správným přístupem je použití kontrolního omezení, jak ukazuje Gordonova odpověď . Omezení jsou efektivnější a také idiomatická. Ale váš učitel chce, abyste napsali spouštěč, takže zde je váš kód, opravený.

CREATE OR REPLACE TRIGGER CheckAdvance
    BEFORE INSERT OR UPDATE OF advance ON titles
    FOR EACH ROW
BEGIN
    IF (:new.advance < 0  
         OR :new.advance > 100)
    THEN
        raise_application_error(-20000
                , 'Advance cannot be less than zero or greater than one hundred.');
    END IF;
END;

Body k poznámce:

  1. CREATE OR REPLACE znamená, že můžeme změnit spouštěcí kód bez předběžného příkazu DROP.
  2. BEGIN a END bloky rámců kódu, jako jsou těla spouštěčů.
  3. Statické podmíněné podmínky jsou orámovány klíčovými slovy IF ... END IF; WHEN je pro opuštění konstrukce smyčky.
  4. Hodnoty sloupců referenční tabulky s klíčovými slovy :NEW (a :OLD) – poznamenejte si dvojtečku.
  5. Použijte RAISE_APPLICATION_ERROR k vyvolání výjimky; číslo chyby musí být v rozsahu -20999 až -20000, které si společnost Oracle vyhrazuje pro uživatelem definované výjimky.
  6. Zajistěte, aby vaše chybová zpráva byla smysluplná:řekněte uživatelům, co udělali špatně, místo abyste je nutili hádat.
  7. Naučte se používat odsazení, aby byl kód čitelný. Vaši budoucí spolupracovníci vám za to poděkují.


  1. Přepínače ng-zkontrolovány s ng-modelem

  2. správně nastavit sqlite db v Androidu

  3. Jak získat součet množství produktů z určitého data?

  4. PLS-00103:Setkal se se symbolem „konec souboru“ v bloku jednoduché aktualizace