PL /SQL Triggers

Triggers lagres programmer som automatisk kjøres eller sparken når noen hendelser inntreffer. Triggere er faktisk skrevet for å bli henrettet som svar på noen av følgende hendelser:.

  • En database manipulasjon (DML) uttalelse (DELETE, INSERT eller UPDATE)

    En database definisjon (DDL) uttalelse (CREATE, ALTER eller DROP).

    En database drift (SERVERERROR, pålogging, avlogging, oppstart eller nedleggelse).

    Triggers kunne defineres på bordet, utsikt, skjema eller databasen som arrangementet er tilknyttet.

    Fordeler med Triggers

    Triggere kan skrives til følgende formål:

    generere noen avledet kolonneverdier automatisk

    Håndheving referanseintegritet

    Hendelses logging og lagring av informasjon på bordet tilgang

    Revisjon

    Synkron replikering av tabeller

    Imponerende sikkerhets fullmakter

    Forhindre ugyldige transaksjoner

    Opprette Triggers Anmeldelser

    Syntaksen for å skape en trigger er:
    CREATE [OR REPLACE] TRIGGER trigger_name {FØR | ETTER | STEDET FOR} {SETT [OR] | UPDATE [OR] | DELETE} [AV col_name] ON table_name [referering OLD AS o NEW AS n] [for hver rad] NÅR (tilstand) ERKLÆRER Declaration-statementsBEGIN Kjørbar-statementsEXCEPTION Exception-håndtering-statementsEND;

    Hvor, etter

    CREATE [OR REPLACE] TRIGGER trigger_name: Oppretter eller erstatter en eksisterende trigger med trigger_name
    .

    {FØR | ETTER | STEDET FOR}: Dette angir når avtrekkeren ville bli henrettet. Den STEDET FOR klausulen brukes til å opprette trigger på en visning

    {SETT [OR]. | UPDATE [OR] | DELETE}: Dette angir DML drift

    [AV col_name]:.. Dette spesifiserer kolonnenavnet som ville bli oppdatert

    [ON table_name]: Dette angir navnet på bordet i forbindelse med avtrekkeren

    [referering OLD AS o NEW AS n]:. Dette gjør at du kan se nye og gamle verdier for ulike DML utsagn , som INSERT, UPDATE og DELETE.

    [for hver rad]: Dette angir rad nivå utløser, dvs. ville utløse bli henrettet for hver rad blir berørt. Ellers avtrekkeren vil kjøre bare én gang når SQL-setningen utføres, som kalles et bord nivå trigger.

    NÅR (tilstand): Dette gir en betingelse for rader som trigger ville brann. Denne klausulen er bare gyldig for rad nivå triggere.

    Eksempel:

    Til å begynne med, vil vi bruke den KUNDER bordet vi hadde skapt og brukt i de foregående kapitlene:
    Velg * fra kunder; + ---- + ---------- + ----- + ----------- + ---------- + | ID | NAME | AGE | ADRESSE | LØNN | + ---- + ---------- + ----- + ----------- + ---------- + | 1 | Ramesh | 32 | Ahmedabad | 2000.00 || 2 | Khilan | 25 | Delhi | 1500.00 || 3 | Kaushik | 23 | Kota | 2000.00 || 4 | Chaitali | 25 | Mumbai | 6500.00 || 5 | Hardik | 27 | Bhopal | 8500.00 || 6 | Komal | 22 | MP | 4500.00 | + ---- + ---------- + ----- + ----------- + ---------- +

    Følgende program skaper en radnivå
    trigger for kunder tabell som ville fyre for INSERT eller UPDATE eller DELETE operasjoner utføres på KUNDER bordet. Dette trigger vil vise lønn forskjellen mellom de gamle verdier og nye verdier:
    CREATE OR REPLACE TRIGGER display_salary_changesBEFORE slette eller sette inn eller oppdatere PÅ customersFOR HVER ROWWHEN (NEW.ID > 0) ERKLÆRER sal_diff nummer, BEGIN sal_diff: =: NEW .salary -: OLD.salary; dbms_output.put_line ('Old lønn:' ||: OLD.salary); dbms_output.put_line ('Ny lønn:' ||: NEW.salary); dbms_output.put_line ('Lønn forskjell:' || sal_diff); END; /

    Når ovenfor koden kjøres på SQL teksten, gir det følgende resultat:.
    Trigger skapte

    Her følger to punkter er viktig og bør bemerkes nøye.

    gamle og nye referanser er ikke tilgjengelig for tabellen nivå triggere, heller du kan bruke dem til rekordhøye triggere

    Hvis du ønsker å søke i bordet i samme avtrekkeren, så du bør bruke ETTER søkeord, fordi triggere kan spørre bordet eller endre det igjen bare etter de første endringene brukes og tabellen er tilbake i en konsistent tilstand. Anmeldelser

    Over trigger er skrevet på en slik måte at det vil fyre før noen slette eller sette inn eller UPDATE drift på bordet, men du kan skrive inn avtrekkeren på en enkelt eller flere operasjoner, for eksempel FØR SLETT, som vil skyte når en rekord vil bli slettet ved hjelp av DELETE operasjon på bordet.

    Utløsende en Trigger

    La oss utføre noen DML operasjoner på KUNDER bordet. Her er en INSERT-setning, noe som vil skape en ny rekord i tabellen:
    INSERT INTO KUNDER (ID, navn, alder, adresse, lønn) VALUES (7, 'Kriti', 22 'HP', 7500.00);

    Når en post er opprettet i KUNDER tabellen ovenfor skape trigger display_salary_changes
    vil bli skutt, og det vil vise følgende resultat: fra Old lønn: New lønn: 7500Salary forskjell:

    Fordi dette er ny rekord så gammel lønn er ikke tilgjengelig, og over resultatet kommer som null. Nå, la oss gjøre ett mer DML operasjon på KUNDER bordet. Her er en UPDATE-setning, som vil oppdatere en eksisterende post i tabellen:
    UPDATE customersSET lønn = lønn + 500WHERE id = 2;

    Når en post er oppdatert i KUNDER tabellen ovenfor skape trigger display_salary_changes
    vil bli skutt, og det vil vise følgende resultat:
    Gammel lønn: 1500New lønn: 2000Salary forskjell: 500



    Next Page: