Oracle PL / SQL Trigger Tutorial: ahelyett, összetett [példa]

mi a Trigger a PL/SQL-ben?

A triggerek olyan tárolt programok, amelyeket az Oracle engine automatikusan kiéget, amikor a DML-nyilatkozatok, például a Beszúrás, a frissítés, a Törlés végrehajtásra kerülnek az asztalon, vagy bizonyos események fordulnak elő. A trigger esetén kivágandó kód a követelmény szerint definiálható. Kiválaszthatja azt az eseményt, amelyen a ravaszt ki kell lőni, valamint a végrehajtás időzítését. A trigger célja az adatbázisban található információk integritásának fenntartása.

ebben A tutorial, hogy megtanulják, –

  • Előnyei Kiváltó
  • Típusú Kiváltó Oracle
  • Hogyan hozható Létre a Trigger
  • :ÚJ :RÉGI Záradék
  • HELYETT Ravaszt
  • Összetett Ravaszt

Előnyei Kiváltó

a Következő előnyei vannak a kiváltó okot.

  • Generál egy származtatott oszlop értékeit automatikusan
  • Érvényesítése referenciális integritás
  • Esemény naplózását, illetve tárolja az adatokat a táblázat hozzáférés
  • Naplózás
  • Szinkron replikáció a táblázatok
  • Impozáns biztonsági engedélyek
  • Megakadályozza érvénytelen ügyletek

Típusú Kiváltó Oracle

Kiváltó sorolható alapján a következő paramétereket.

  • osztályozás az időzítés alapján
    • A Trigger előtt: a megadott esemény bekövetkezése előtt tüzel.
    • Trigger után: a megadott esemény bekövetkezése után tüzel.
    • Trigger helyett: egy speciális Típus. Többet megtudhat a további témákról. (csak DML esetén)
  • osztályozás a
    • UTASÍTÁSSZINT Trigger szint alapján: a megadott eseménykimutatáshoz egyszer tüzel.
    • ROW level Trigger: minden olyan rekordra tüzel, amelyet a megadott esemény érintett. (csak DML esetén)
  • osztályozás az esemény alapján
    • DML Trigger: a DML esemény megadásakor (beszúrás/frissítés/törlés)
    • DDL Trigger: Ha a DDL esemény meg van adva (CREATE/ALTER)
    • adatbázis Trigger: az adatbázis esemény megadásakor tüzel (LOGON/LOGOFF/indítás/leállítás)

tehát minden trigger a fenti paraméterek kombinációja.

Hogyan hozzunk létre triggert

Az alábbiakban a trigger létrehozásának szintaxisa található.

triggerek a PL/SQL

CREATE TRIGGER <trigger_name> ON<name of underlying object> DECLARE<Declaration part>BEGIN<Execution part> EXCEPTION<Exception handling part> END;

szintaxis magyarázat:

  • a fenti szintaxis a trigger létrehozásában jelen lévő különböző opcionális kijelentéseket mutatja.
  • előtt / után adja meg az esemény időzítését.
  • INSERT/UPDATE/LOGON/CREATE / etc. meghatározza azt az eseményt, amelyre a ravaszt ki kell lőni.a
  • on záradék meghatározza, hogy a fent említett esemény melyik objektumra érvényes. Például ez lesz a táblázat neve, amelyen a DML esemény előfordulhat a DML Trigger esetében.
  • parancs “minden sorhoz” megadja a SORSZINT ravaszt.
  • mikor záradék meghatározza a további feltétel, amelyben a ravaszt kell tüzet.
  • a Deklarációs rész, végrehajtási rész, kivételkezelő rész megegyezik a többi PL/SQL blokkéval. A nyilatkozat része és a kivételkezelés része nem kötelező.

:új és :régi záradék

egy sor szintű triggerben a trigger minden kapcsolódó sorhoz tüzet okoz. Néha meg kell ismerni az értéket a DML nyilatkozat előtt és után.

Az Oracle két záradékot biztosított a rekordszintű triggerben ezen értékek megtartásához. Ezeket a záradékokat használhatjuk a régi és új értékekre a trigger testben.

  • :Új-új értéket tart az alaptábla/nézet oszlopaihoz a trigger végrehajtása során
  • :régi-az alaptábla/nézet oszlopainak régi értékét tartja a trigger végrehajtása során

ezt a záradékot a DML esemény alapján kell használni. Az alábbi táblázat meghatározza, hogy melyik záradék érvényes a DML-nyilatkozatra (beszúrás/frissítés/törlés).

érvényes

VALID

INSERT UPDATE DELETE
: NEW VALID érvényes érvénytelen. A törlési esetben nincs új érték.
:Régi érvénytelen. A VALID VALID

helyett Trigger

“helyett trigger” a trigger speciális típusa. Csak a DML triggerekben használják. Ezt akkor használják, ha bármilyen DML esemény fog bekövetkezni a komplex nézet.

Vegyünk egy példát, amelyben egy nézet 3 alaptáblából készül. Ha bármilyen DML esemény kerül kiadásra ezen a nézeten, ez érvénytelenné válik, mert az adatok 3 különböző táblázatból származnak. Tehát ebben a trigger helyett használják. A trigger helyett az alaptáblázatokat közvetlenül módosítjuk az adott esemény nézetének módosítása helyett.

1. példa: ebben a példában komplex nézetet fogunk létrehozni két alaptáblából.

  • Table_1 is emp table and
  • Table_2 is department table table_2.

akkor látni fogjuk, hogy a trigger helyett hogyan használják a helymeghatározási nyilatkozat frissítését ebben a komplex nézetben. Azt is látni fogjuk, hogy a: NEW and: OLD hasznos a triggerekben.

  • 1. lépés: Tábla létrehozása ’emp’, illetve ‘osztály’ a megfelelő oszlop
  • 2. Lépés: Kitöltése a táblázatot a minta értékek
  • 3. Lépés: Creating a nézet, hogy a fent létrehozott táblázat
  • 4. Lépés: Frissítse a nézetet, mielőtt a helyett-a ravaszt
  • 5. Lépés: Teremtés a helyett-a ravaszt
  • 6. Lépés: Frissítés nézet után, hanem-a ravaszt

1. Lépés) Tábla létrehozása ’emp’, illetve ‘osztály’ a megfelelő oszlop

Kiváltja a PL/SQL

CREATE TABLE emp(emp_no NUMBER,emp_name VARCHAR2(50),salary NUMBER,manager VARCHAR2(50),dept_no NUMBER);/CREATE TABLE dept( Dept_no NUMBER, Dept_name VARCHAR2(50),LOCATION VARCHAR2(50));/

Kód Magyarázat

  • Kód vonal 1-7: Táblázat ” emp ” létrehozása.
  • kódsor 8-12: táblázat’ dept ‘ létrehozása.

Output

Table Created

2. lépés) Most, hogy létrehoztuk a táblázatot, feltöltjük ezt a táblázatot mintaértékekkel és a fenti táblázatok nézeteinek létrehozásával.

a PL/SQL

BEGININSERT INTO DEPT VALUES(10,‘HR’,‘USA’);INSERT INTO DEPT VALUES(20,'SALES','UK’);INSERT INTO DEPT VALUES(30,‘FINANCIAL',‘JAPAN'); COMMIT;END;/BEGININSERT INTO EMP VALUES(1000,'XXX5,15000,'AAA',30);INSERT INTO EMP VALUES(1001,‘YYY5,18000,‘AAA’,20) ;INSERT INTO EMP VALUES(1002,‘ZZZ5,20000,‘AAA',10); COMMIT;END;/

Kód magyarázata

  • kódsor 13-19: adatok beillesztése a “dept” táblázatba.
  • kódsor 20-26: adatok beillesztése az ” emp ” táblába.

kimenet

PL / SQL eljárás befejeződött

3. lépés) nézet létrehozása a fent létrehozott táblához.

a PL/SQL

CREATE VIEW guru99_emp_view(Employee_name:dept_name,location) ASSELECT emp.emp_name,dept.dept_name,dept.locationFROM emp,deptWHERE emp.dept_no=dept.dept_no;/
SELECT * FROM guru99_emp_view;

Kód magyarázata

  • kódsor 27-32: létrehozása “guru99_emp_view” nézet.
  • 33-as kódsor: guru99_emp_view lekérdezése.

Output

View created

EMPLOYEE_NAME DEPT_NAME LOCATION
ZZZ HR USA
YYY SALES UK
XXX FINANCIAL JAPAN

Step 4) Update of view before instead-of trigger.

Triggers in PL/SQL

BEGINUPDATE guru99_emp_view SET location='FRANCE' WHERE employee_name=:'XXX’;COMMIT;END;/

Code Explanation

  • Code line 34-38: Update the location of “XXX” to ‘FRANCE’. Ez azért emelte ki a kivételt, mert a DML-kimutatások nem engedélyezettek a komplex nézetben.

Output

ORA-01779: nem lehet módosítani egy oszlopot, amely egy nem Kulcs-megőrzött táblára térképez

ORA-06512: a 2.sorban

5. lépés), hogy elkerüljük a hiba találkozását az előző lépés frissítési nézetében, ebben a lépésben a “trigger helyett.”

a PL/SQL

CREATE TRIGGER guru99_view_modify_trgINSTEAD OF UPDATEON guru99_emp_viewFOR EACH ROWBEGINUPDATE deptSET location=:new.locationWHERE dept_name=:old.dept_name;END;/

Kód magyarázata

  • kódsor 39: Létrehozása helyett trigger “frissítés” esemény a “guru99_emp_view” nézetben a sor szintjén. Tartalmazza a frissítési nyilatkozatot, hogy frissítse a helyet a “dept” alaptáblában.
  • 44-es kódsor: a frissítési utasítás a frissítés előtt és után az oszlopok értékének megtalálásához a”: NEW “és a”: OLD ” szavakat használja.

kimenet

Trigger létrehozva

6. lépés) a nézet frissítése a trigger helyett. Most a hiba nem fog megjelenni, mivel a” trigger helyett ” kezeli ennek a komplex nézetnek a frissítési működését. Amikor a kódex végrehajtja a XXX alkalmazott helyét, frissítésre kerül” Franciaország ” – ra Japánból.”

a PL/SQL

BEGINUPDATE guru99_emp_view SET location='FRANCE' WHERE employee_name='XXX'; COMMIT;END;/
SELECT * FROM guru99_emp_view;

Kód magyarázata:

  • kódsor 49-53: a “XXX” helyének frissítése “Franciaország” – ra. Ez azért sikeres, mert a “helyett” trigger leállította a tényleges frissítési nyilatkozatot a nézetben, majd végrehajtotta az alaptábla frissítését.
  • 55-ös kódsor: a frissített rekord ellenőrzése.

kimenet:

a PL/SQL eljárás sikeresen befejeződött

EMPLOYEE_NAME DEPT_NAME HELYSZÍN
ZZZ HR MAGYARORSZÁG
YYY ÉRTÉKESÍTÉSI egyesült KIRÁLYSÁG
XXX PÉNZÜGYI FRANCIAORSZÁG

Összetett Ravaszt

A Vegyület okozza a ravaszt, amely lehetővé teszi, hogy meghatározza, intézkedések az egyes, a négy időzítés pont a single trigger test. A négy különböző időzítési pont támogatja az alábbi.

  • előtt nyilatkozat – level
  • előtt sor-level
  • után sor-level
  • után nyilatkozat-level

Ez biztosítja a lehetőséget, hogy összekapcsolják a műveletek különböző időzítés ugyanabba a ravaszt.

triggerek PL/SQL

CREATE TRIGGER <trigger_name> FORON <name of underlying object><Declarative part>‭ ‬BEFORE STATEMENT ISBEGIN<Execution part>;END BEFORE STATEMENT;BEFORE EACH ROW ISBEGIN<Execution part>;END EACH ROW;AFTER EACH ROW ISBEGIN<Execution part>;END AFTER EACH ROW;AFTER STATEMENT ISBEGIN<Execution part>;END AFTER STATEMENT;END;

szintaxis magyarázat:

  • a fenti szintaxis a “vegyület” trigger létrehozását mutatja.
  • a deklaratív szakasz a trigger test összes végrehajtási blokkjára jellemző.
  • ezek a 4 időzítési blokk bármilyen sorrendben lehet. Ez nem kötelező, hogy az összes ilyen 4 időzítés blokkok. Létrehozhatunk egy összetett triggert csak a szükséges időzítésekhez.

1. példa: ebben a példában létrehozunk egy ravaszt, hogy automatikusan feltöltsük a Fizetési oszlopot az alapértelmezett 5000 értékkel.

Triggers in PL/SQL

CREATE TRIGGER emp_trig FOR INSERT ON empCOMPOUND TRIGGER BEFORE EACH ROW IS BEGIN:new.salary:=5000;END BEFORE EACH ROW;END emp_trig;/
BEGININSERT INTO EMP VALUES(1004,‘CCC’,15000,‘AAA’,30); COMMIT;END;/
SELECT * FROM emp WHERE emp_no=1004;

kód magyarázat:

  • kódsor 2-10: összetett Trigger létrehozása. A Soros szint előtti időzítéshez jön létre, hogy a fizetést 5000 alapértelmezett értékkel töltse fel. Ez megváltoztatja a fizetést az “5000” alapértelmezett értékre, mielőtt a rekordot beillesztené a táblázatba.
  • kódsor 11-14: helyezze be a rekordot az ” emp ” táblába.
  • kódsor 16: a beillesztett rekord ellenőrzése.

kimenet:

Trigger létrehozott

PL / SQL eljárás sikeresen befejeződött.

EMP_NAME EMP_NO fizetés menedzser DEPT_NO
CCC 1004 5000 AAA 30

A triggerek engedélyezése és letiltása

a triggerek engedélyezhetők vagy letilthatók. A trigger engedélyezéséhez vagy letiltásához meg kell adni egy ALTER (DDL) nyilatkozatot a trigger számára, amely letiltja vagy engedélyezi.

Az alábbiakban a triggerek engedélyezésének/letiltásának szintaxisa található.

ALTER TRIGGER <trigger_name> ;ALTER TABLE <table_name> ALL TRIGGERS;

szintaxis magyarázat:

  • az első szintaxis megmutatja, hogyan lehet engedélyezni/letiltani az egyetlen triggert.
  • a második utasítás bemutatja, hogyan lehet engedélyezni/letiltani az összes triggert egy adott asztalon.

összefoglaló

ebben a fejezetben megismertük a PL / SQL triggereket és azok előnyeit. Megtanultuk a különböző osztályozásokat is, és a trigger és az összetett trigger helyett tárgyaltunk.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük