triggers pl sql tutorial with example programs
Lär dig allt om Triggers i PL SQL, deras typer, användning och fördelar:
I PL SQL-transaktioner handledning av PL / SQL-serien , vi har lärt oss om COMMIT, ROLLBACK och SAVEPOINTS uttalanden.
I den här artikeln kommer vi att utforska triggers i PL SQL och deras fördelar, typer och användning. Vi kommer att diskutera hur man skapar, utlöser, aktiverar och inaktiverar PL / SQL-utlösare med hjälp av exempelprogram.
Låt oss börja med diskussionen !!
Vad du kommer att lära dig:
Utlösare i PL / SQL
Ett lagrat program som avfyras som standard eller av vissa händelser kallas en trigger.
En trigger körs på grund av följande omständigheter listade nedan:
- Genom ett DDL-uttalande (Data Definition Language) som DROP, ALTER eller CREATE.
- Genom ett DML-uttalande (Data Manipulation Language) som UPDATE, INSERT eller DELETE.
- Genom en databasåtgärd som SHUTDOWN, STARTUP, LOGOFF och LOGON.
En utlösare kan ställas in på ett schema, vy eller databas som har en händelse bifogad.
Fördelar med utlösare
Dessa listas nedan:
- Möjlighet att genomdriva referensintegritet.
- Förmåga att övervaka.
- Möjlighet att logga och hålla data på åtkomsttabeller.
- Möjlighet att stoppa transaktioner som inte är giltiga.
- Möjlighet att tillämpa säkerhetsfunktioner.
- Möjlighet att producera härledda kolumnvärden som standard.
Användningar av utlösare
Dessa listas nedan:
- Förhindrar felaktiga transaktioner.
- Ackumulerar information om tabellanvändning.
- Övervaka kritisk information.
Typer av utlösare i PL / SQL
Utlösarna kan kategoriseras baserat på parametrar. Typer av utlösare listas nedan:
# 1) Kategorisering på triggernivån.
- ROW Level trigger: Det körs för varje post som uppdateras av ett DML-uttalande.
- UTTALANDE Nivåutlösare: Det körs bara en gång av händelsedeklarationen.
# 2) Kategorisering på avtryckartimingen.
- FÖRE trigger: Det körs före den specifika händelsen som har ägt rum.
- EFTER avtryckaren: Det körs efter den specifika händelsen som har ägt rum.
- I stället för avtryckaren: Det är en speciell typ av utlösare och den körs för varje post som uppdateras av ett DML-uttalande.
# 3) Kategorisering av triggerhändelsen.
- DML-utlösare: Det körs om en DML-händelse som UPDATE, INSERT eller DELETE utförs.
- DDL-utlösare: Det körs om en DDL-händelse som DROP, ALTER eller CREATE utförs.
- DATABAS-utlösare: Det körs om en databashändelse som STÄNGNING, START, LOGOFF och LOGON har ägt rum.
Skapa utlösare
Syntax för att skapa en utlösare:
CREATE (OR REPLACE ) TRIGGER trigger_n BEFORE DELETE (OF column_n) ON table_n (REFERENCING OLD AS o NEW AS n) (FOR EACH ROW) WHEN (condition) DECLARE <> BEGIN < > EXCEPTION <> END;
Här,
- SKAPA (ELLER Byt ut) TRIGGER trigger_n - Detta är för att skapa, ersätta eller uppdatera en trigger med ett namn som trigger_n.
- EFTER - Detta är för att bestämma tiden när avtryckaren ska avfyras. INSTEAD OF är för att skapa en trigger som har en vy.
- RADERA - Detta är för att utföra DML-åtgärder.
- (OF kolumn_n) - Detta är för att nämna kolumnnamnet som ska ändras.
- (PÅ tabell_n) - Detta är för att nämna tabellnamnet som är fäst vid utlösaren.
- (HÄNVISNING GAMMAL SOM o NY AS n) - Detta är för att hänvisa till de gamla och nya värdena med DML-uttalandet som UPDATE, INSERT eller DELETE.
- (FÖR VARJE RAD) - Detta bestämmer en radnivåutlösare, dvs. utlösaren kommer att avfyras för varje rad som modifieras, annars aktiveras utlösaren bara en gång när SQL-satsen körs, vilket kallas tabellnivåutlösare.
- NÄR (tillstånd) - Detta ger ett villkor för rader för vilka utlösaren skulle köras. Detta gäller endast utlösare på radnivå.
Låt oss återigen överväga en tabell som heter STUDERANDE .
Låt oss nu skapa en radnivåutlösare för STUDENT-tabellen som skulle köras av DML-uttalandet som UPDATE, INSERT eller DELETE på den bordet. Utlösaren beräknar och visar åldersskillnaden mellan aktuella och tidigare värden.
Kodimplementering för att skapa trigger:
CREATE OR REPLACE TRIGGER age_changes BEFORE DELETE OR INSERT OR UPDATE ON student FOR EACH ROW WHEN (NEW.CODE > 0) DECLARE age_diff number; BEGIN age_diff := :NEW.age - :OLD.age; dbms_output.put_line ('Prevoius age: ' || : OLD.age); dbms_output.put_line ('Current age: ' || : NEW.age); dbms_output.put_line ('Age difference: ' || age_diff); END; /
Utmatning av ovanstående kod:
Ovanstående kod har några viktiga egenskaper. De listas nedan:
- GAMLA och NYA adresser är inte tillgängliga för en tabellnivå-trigger. Vi kan använda dessa referenser för utlösare på postnivå.
- Om vi vill tillämpa en ny fråga i samma utlösare måste vi använda nyckelordet EFTER som en utlösare som kan ändra en tabell igen först efter att de tidigare ändringarna har tillämpats korrekt.
- Utlösaren som diskuteras ovan körs före alla DELETE-, UPDATE- eller INSERT-åtgärder på bordet. Vi kan dock också designa en utlösare som också avfyras vid en enda operation ( till exempel, EFTER INSERT som kommer att utföra utlösaren när en post sätts in med hjälp av INSERT-operationen på bordet).
Triggering Triggers In PL SQL
För att aktivera ovanstående utlösare måste vi göra alla DML-operationer som DELETE, INSERT eller UPDATE på bordet. Låt oss åter infoga några värden i studenttabellen med hjälp av nedanstående fråga:
INSERT INTO STUDENT VALUES (4, 'MARY', 16, 97);
När INSERT-operationen är klar i studenttabellen, utlösaren åldersförändringar blir avrättad.
Utgången från frågekoden:
Eftersom en ny post skapas och den tidigare åldern inte är tillgänglig, har den tidigare åldern och Åldersskillnad beräkning är noll i ovanstående utdata.
Låt oss nu ändra en post med UPDATE-uttalande med hjälp av nedanstående fråga:
UPDATE student SET age = age + 1 WHERE code = 7;
När UPDATE-åtgärden är klar i studenttabellen, utlösaren åldersförändringar blir avrättad.
Resultatet av ovanstående fråga:
NY OCH GAMLA Klausul
En ny klausul används för att lagra det nya värdet för kolumnerna i tabellen för att utföra utlösaren. Det används i rekordnivå triggers. En gammal klausul används för att lagra det gamla värdet för kolumnerna i tabellen för att utföra utlösaren. Den används också i triggers på rekordnivå.
Således används den nya och gamla klausulen för att hålla och hänvisa till de nya och gamla värdena i en utlösarkropp.
Sammansatt utlösare
En sammansatt utlösare används för att definiera operationerna för alla tidpunkter i utlösarkroppen. Det ger bestämmelsen att slå samman alla åtgärder vid olika tidpunkter inom ett utlösande organ.
De olika tidpunkterna listas nedan:
- EFTER UTTALANDEN nivå
- FÖR RAD-nivå
- EFTER RAD-nivå
- FöR UTTALANDE nivå
Inaktivera och aktivera utlösare
Vi kan aktivera och inaktivera en utlösare med hjälp av ett DDL-uttalande ALTER.
Syntax:
ALTER TRIGGER trigger_n (ENABLE|DISABLE);
Här är trigger_n namnet på utlösaren som vi vill aktivera eller inaktivera.
Låt oss nu inaktivera avtryckaren med hjälp av frågan nedan:
ALTER TRIGGER STUDENT_DETAILS DISABLE;
Utgången från frågekoden:
Låt oss nu aktivera samma utlösare med hjälp av nedanstående fråga:
ALTER TRIGGER STUDENT_DETAILS ENABLE;
Utgången från frågekoden:
Vanliga frågor och svar
F # 1) Hur många typer av triggers finns i PL SQL?
Svar: Det finns två typer av utlösare i PL / SQL. De är utlösare på radnivå och utlösningsnivå.
F # 2) Vilken typ av utlösare använder de gamla och nya kvalet?
hur man skapar en string array java
Svar: De gamla och nya kvalificeringarna kan endast användas med utlösare på radnivå. De är inte kompatibla med utlösare på uttalningsnivå.
F # 3) Vad är skillnaden mellan trigger ny och trigger gammal?
Svar: En ny trigger ger en lista med nya versioner av postobjekten. En gammal utlösare ger en lista med gamla versioner av postobjekten.
F # 4) Vad är en utlösare på radnivå i PL SQL?
Svar: En radnivåutlösare aktiveras bara för en rad en gång på grund av en händelse. Till exempel, om radering betraktas som en utlösande händelse för en tabell, påverkar ett borttagningsuttalande två rader, så ska utlösaren aktiveras två gånger.
F # 5) Vad är en utlösare? Förklara med ett exempel.
Svar: En utlösare är ett lagrat förfarande som avfyras som standard om en incident inträffar i databasen. Till exempel, om en rad infogas i en tabell eller om vi ändrar några värden i tabellen.
F # 6) Vilka är eftertriggarna?
Svar: Eftertriggarna avfyras efter genomförandet av ett DML-uttalande men före åtagandet till databasen. Det kan också rulla tillbaka sin handling.
Slutsats
I denna handledning har vi diskuterat några grundläggande begrepp för Triggers i PL SQL som är viktiga för att använda dem under programmering. Vi har täckt följande ämnen som listas nedan:
- Utlösare.
- Typer av utlösare.
- Olika operationer på triggers.
<< PREV Tutorial | NÄSTA självstudie >>