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:
- CREATE OR REPLACE znamená, že můžeme změnit spouštěcí kód bez předběžného příkazu DROP.
- BEGIN a END bloky rámců kódu, jako jsou těla spouštěčů.
- 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.
- Hodnoty sloupců referenční tabulky s klíčovými slovy :NEW (a :OLD) – poznamenejte si dvojtečku.
- 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.
- 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.
- Naučte se používat odsazení, aby byl kód čitelný. Vaši budoucí spolupracovníci vám za to poděkují.