Oracle PL/SQL Trigger Tutorial: Místo, Sloučeniny [Příklad]

Co je Triggeru v PL/SQL?

triggery jsou uloženy programy, které jsou spouštěny Oracle engine automaticky, když DML příkazy jako insert, update, delete jsou prováděny na stole nebo některé události nastanou. Kód, který má být excecutován v případě spouště, lze definovat podle požadavku. Můžete si vybrat událost, při které je třeba spoušť vystřelit, a načasování provedení. Účelem triggeru je zachovat integritu informací v databázi.

V tomto kurzu, budete-

  • Výhody Spouští
  • Typy Triggery v prostředí Oracle
  • Jak Vytvořit Spouštěcí
  • :NEW a :STARÉ Doložka
  • MÍSTO Spoušť
  • Složené Vyvolat

Výhody Spouští

Následující jsou výhody spouští.

  • Generování odvozené hodnoty sloupců automaticky
  • Vynucení referenční integrity
  • protokolování Událostí a ukládání informací na stůl přístup
  • Audit
  • Synchronní replikace tabulek
  • Uložení autorizace zabezpečení
  • Zabránit neplatné transakce

Druhy Triggery v prostředí Oracle

aktivační události mohou být klasifikovány na základě následujících parametrů.

  • Klasifikace založená na načasování
    • PŘED Spoušť: požáry, před specifikované události došlo.
    • Po spuštění: spustí se poté, co nastala zadaná událost.
    • místo spouště: speciální typ. Dozvíte se více o dalších tématech. (pouze pro DML )
  • klasifikace založená na úrovni
    • trigger úrovně příkazu: spustí se jednou pro zadaný příkaz události.
    • spoušť na úrovni řádku: spustí se pro každý záznam, který byl ovlivněn v zadané události. (pouze pro DML)
  • klasifikace založená na události
    • DML Trigger: spustí se při zadání události DML (INSERT/UPDATE/DELETE)
    • DDL Trigger: Vystřelí, když DDL události je uvedeno (VYTVOŘIT/ZMĚNIT)
    • DATABÁZE Spoušť: Je aktivována, když je databáze událostí je uvedeno (PŘIHLÁŠENÍ/ODHLÁŠENÍ/STARTUP/SHUTDOWN)

každá spoušť je kombinace výše uvedených parametrů.

jak vytvořit spoušť

níže je uvedena syntaxe pro vytvoření spouštěče.

Triggery v PL/SQL

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

Vysvětlení Syntaxe:

  • výše uvedené syntaxe ukazuje různé volitelné příkazy, které jsou přítomny v trigger stvoření.
  • před / po určí časování událostí.
  • vložit / aktualizovat/přihlásit/vytvořit / atd. určí událost, pro kterou je třeba spustit spoušť.
  • klauzule ON určí, na kterém objektu je výše uvedená událost platná. Jedná se například o název tabulky, na které může dojít k události DML v případě spouštěče DML.
  • příkaz „pro každý řádek“ určí spoušť úrovně řádku.
  • kdy klauzule určí dodatečnou podmínku, ve které musí spoušť vystřelit.
  • část deklarace, část provádění, část zpracování výjimek je stejná jako u ostatních bloků PL / SQL. Část prohlášení a část pro zpracování výjimek jsou volitelné.

: nová a: stará klauzule

v spouštěči úrovně řádku se spustí spoušť pro každý související řádek. A někdy je nutné znát hodnotu před a po příkazu DML.

Oracle poskytl dvě klauzule ve spouštěči na úrovni záznamu, aby tyto hodnoty držel. Tyto klauzule můžeme použít k označení starých a nových hodnot uvnitř těla spouště.

  • :NOVÝ – má nové hodnoty pro sloupce základní tabulky/zobrazení během spouštění triggerů
  • :STARÝ – To drží staré hodnoty sloupce základní tabulky/zobrazení během spouštění triggerů

Tento bod by měl být použit na základě DML události. V následující tabulce bude uvedeno, která klauzule je platná pro který příkaz DML (INSERT / UPDATE/DELETE).

VLOŽIT UPDATE SMAZAT
: PLATNÉ PLATNÉ NEPLATNÝ. V případě odstranění není žádná nová hodnota.
:Starý neplatný. V případě vložení neexistuje žádná stará hodnota VALID VALID

místo spouště

„místo spouště“ je speciální typ spouště. Používá se pouze v spouštěčích DML. Používá se, když dojde k jakékoli události DML v komplexním zobrazení.

zvažte příklad, ve kterém je pohled vytvořen ze 3 základních tabulek. Pokud je v tomto zobrazení vydána jakákoli událost DML, stane se neplatná, protože data jsou převzata ze 3 různých tabulek. Takže v tomto místo spouště se používá. Místo triggeru se používá k úpravě základních tabulek přímo namísto úpravy zobrazení pro danou událost.

Příklad 1: v tomto příkladu vytvoříme komplexní pohled ze dvou základních tabulek.

  • Table_1 je tabulka emp a
  • Table_2 je tabulka oddělení.

pak uvidíme, jak se místo spouště používá k vydání aktualizace příkazu detail umístění v tomto komplexním pohledu. Uvidíme také, jak jsou: nové a: staré užitečné ve spouštěčích.

  • Krok 1: Vytvoření tabulky ‚emp‘ a ‚dept‘ s příslušných sloupců
  • Krok 2: Vyplnění tabulky s ukázkovými hodnotami,
  • Krok 3: Vytvoření zobrazení pro výše zmíněné vytvořené tabulky
  • Krok 4: Aktualizace pohledu, než na místo-trigger
  • Krok 5: Vytvoření místo-trigger
  • Krok 6: Aktualizace zobrazení po místo-trigger

Krok 1) Vytvoření tabulky ‚emp‘ a ‚dept‘ s vhodné sloupce,

Triggery v 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 Vysvětlení

  • řádek Kódu 1-7: Vytvoření tabulky.
  • kódový řádek 8-12: vytvoření tabulky ‚dept‘.

Výstupní

Tabulka Vytvořena,

Krok 2) Nyní když máme vytvořeny tabulky, budeme naplnění této tabulky s ukázkovými hodnotami a Vytvoření Názorů na výše uvedené tabulky.

Triggery v 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 Vysvětlení

  • řádek Kódu 13-19: Vkládání dat do ‚dept‘ tabulka.
  • kódový řádek 20-26: vkládání dat do tabulky‘ emp‘.

výstup

PL / SQL procedura dokončena

Krok 3) Vytvoření zobrazení pro výše vytvořenou tabulku.

Triggery v 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 Vysvětlení

  • řádek Kódu 27-32: Vytvoření ‚guru99_emp_view‘ pohled.
  • kódový řádek 33: dotazování guru99_emp_view.

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‘. Vznesla výjimku, protože příkazy DML nejsou povoleny v komplexním pohledu.

Výstupní

ORA-01779: nelze změnit sloupec, který mapuje mimo klíč-zachovalé tabulky.

ORA-06512: na řádku 2,

Krok 5), Aby se zabránilo chybu dojít během aktualizace zobrazení v předchozím kroku, v tomto kroku budeme používat „místo spoušť.“

Triggery v 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 Vysvětlení

  • řádek Kódu 39: Vytvoření místo trigger pro ‚UPDATE‘ událost na‘ guru99_emp_view ‚ pohled na úrovni řádku. Obsahuje prohlášení o aktualizaci pro aktualizaci umístění v základní tabulce „dept“.
  • kódový řádek 44: příkaz Update používá ‚:NEW‘ a ‚: OLD ‚ k nalezení hodnoty sloupců před a po aktualizaci.

výstup

Trigger vytvořen

Krok 6) aktualizace zobrazení po namísto-spouště. Nyní chyba nepřijde, protože „místo spouště“ zvládne operaci aktualizace tohoto komplexního zobrazení. A když kód provedl umístění zaměstnance XXX bude aktualizován na „Francie“ z “ Japonska.“

Triggery v PL/SQL

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

Kód Vysvětlení:

  • řádek Kódu 49-53: Aktualizace umístění „XXX“ na „FRANCIE“. Je to úspěšné, protože spoušť „místo“ zastavila zobrazení skutečného příkazu aktualizace a provedla aktualizaci základní tabulky.
  • kódový řádek 55: ověření aktualizovaného záznamu.

výstup:

PL/SQL procedura úspěšně dokončena

EMPLOYEE_NAME DEPT_NAME UMÍSTĚNÍ
ZZZ HOD USA
YYY PRODEJ UK
XXX FINANČNÍ FRANCIE

Sloučenina Spoušť

Sloučenina spoušť je spoušť, která vám umožní specifikovat akce pro každý ze čtyř načasování bodů v single kohoutek těla. Čtyři různé časové body, které podporuje, jsou uvedeny níže.

  • předtím, NEŽ PROHLÁŠENÍ úrovni
  • PŘED ROW – level
  • PO ROW – level
  • PO PROHLÁŠENÍ úrovni

To poskytuje možnost kombinovat akce pro různé časování na stejnou spoušť.

Triggery v 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;

Vysvětlení Syntaxe:

  • výše uvedené syntaxe ukazuje vytvoření ‚SLOŽENÉ‘ spoušť.
  • deklarativní sekce je společná pro všechny spouštěcí bloky v těle spouště.
  • tyto 4 časové bloky mohou být v libovolném pořadí. Není povinné mít všechny tyto 4 časové bloky. Můžeme vytvořit složenou spoušť pouze pro požadované časování.

Příklad 1: v tomto příkladu vytvoříme spoušť pro automatické naplnění sloupce platu výchozí hodnotou 5000.

Triggery v 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 Vysvětlení:

  • řádek Kódu 2-10: Vytvoření složeného spoušť. Je vytvořen pro načasování před řádkovou úrovní, aby se plat naplnil výchozí hodnotou 5000. To se změní plat na výchozí hodnotu ‚5000‘ před vložením záznamu do tabulky.
  • kódový řádek 11-14: vložte záznam do tabulky‘ emp‘.
  • kódový řádek 16: ověření vloženého záznamu.

výstup:

Trigger vytvořen

PL / SQL procedura úspěšně dokončena.

EMP_NAME EMP_NO PLAT SPRÁVCE DEPT_NO
CCC 1004 5000 AAA 30

zapnutí a Vypnutí Spouštěče

Spouští může být povoleno nebo zakázáno. Chcete-li povolit nebo zakázat spoušť, je třeba uvést příkaz ALTER (DDL) pro spoušť, která ji deaktivuje nebo povolí.

níže je uvedena syntaxe pro povolení / zakázání spouštěčů.

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

vysvětlení syntaxe:

  • první syntaxe ukazuje, jak povolit / zakázat jednu spoušť.
  • druhý příkaz ukazuje, jak povolit / zakázat všechny spouštěče v konkrétní tabulce.

shrnutí

v této kapitole jsme se dozvěděli o spouštěčích PL/SQL a jejich výhodách. Naučili jsme se také různé klasifikace a diskutovali jsme místo spouště a složeného spouště.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *