sql >> Database >  >> RDS >> Oracle

Invoegtrigger voorkomen

Ik had een gesprek met een universitair docent die PL/SQL doceerde nadat ik een presentatie had gegeven op een conferentie. Mijn lezing ging over goede praktijken van PL/SQL; een van mijn dia's zei gewoon "Gebruik geen triggers". De docent vertelde me dat hij dergelijke adviezen moeilijk verenigbaar vindt met de behoeften van het curriculum. Ze moeten hun studenten alle syntaxis leren, maar hij gaf toe dat ze vaak taken opstelden die oplossingen vereisten die we niet zouden gebruiken bij het professioneel schrijven van software.

Dit is zo'n vraag. De juiste benadering is om een ​​controlebeperking te gebruiken, zoals Gordons antwoord laat zien . Beperkingen zijn efficiënter en ook idiomatischer. Maar je leraar wil dat je een trigger schrijft, dus hier is je code, gecorrigeerd.

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;

Aandachtspunten:

  1. CREATE OR REPLACE betekent dat we de triggercode kunnen wijzigen zonder een voorafgaande DROP-instructie.
  2. BEGIN en END frameblokken met code zoals triggerbody's.
  3. Statische voorwaarden worden omkaderd met IF ... END IF trefwoorden; WHEN is voor het verlaten van lusconstructies.
  4. Kolomwaarden in de referentietabel met :NEW (en :OLD) trefwoorden - let op de dubbele punt.
  5. Gebruik RAISE_APPLICATION_ERROR om een ​​uitzondering te genereren; het foutnummer moet in het bereik -20999 tot -20000 liggen dat Oracle reserveert voor door de gebruiker gedefinieerde uitzonderingen.
  6. Maak uw foutmelding zinvol:vertel uw gebruikers wat ze verkeerd hebben gedaan in plaats van ze te laten raden.
  7. Leer inspringen te gebruiken om uw code leesbaar te maken. Je toekomstige collega's zullen je er dankbaar voor zijn.


  1. mysqli fetch() wordt niet opgehaald

  2. hoe een csv-bestand in jQuery te lezen met behulp van het codeigniter-framework

  3. utf8 instellen met mysql via php

  4. Dynamisch mysql select Query maken