Oracle PL / SQL-i päästikute õpetus: ühendi asemel (näide)

Lang L: none (table-of-contents):

Anonim

Mis on päästik PL / SQL-is?

TRIGGERS on salvestatud programmid, mille Oracle'i mootor käivitab automaatselt, kui tabelis käivitatakse DML-i avaldused, nagu sisestamine, värskendamine, kustutamine, või toimuvad mõned sündmused. Päästiku korral käivitatava koodi saab määratleda vastavalt nõudele. Saate valida sündmuse, millele päästik tuleb käivitada, ja täitmise ajastuse. Päästiku eesmärk on säilitada andmebaasis oleva teabe terviklikkus.

Selles õpetuses saate teada

  • Käivitajate eelised
  • Oracle'i käivitajate tüübid
  • Kuidas käivitada
  • : UUS ja: VANA klausel
  • Käivitaja asemel
  • Ühendi päästik

Käivitajate eelised

Järgmised on päästikute eelised.

  • Mõne tuletatud veeru väärtuse loomine automaatselt
  • Referentsiaalse terviklikkuse tagamine
  • Sündmuste logimine ja tabelisse juurdepääsu teabe salvestamine
  • Auditeerimine
  • Tabelite sünkroonne replikatsioon
  • Turvalubade kehtestamine
  • Kehtetute tehingute ennetamine

Oracle'i käivitajate tüübid

Käivitajaid saab klassifitseerida järgmiste parameetrite alusel.

  • Klassifikatsioon ajastuse põhjal
    • ENNE käivitamist: see käivitub enne määratud sündmuse toimumist.
    • PÄRAST päästik: see käivitub pärast määratud sündmuse toimumist.
    • Käiviti asemel: eritüüp. Lisateavet saate edasiste teemade kohta. (ainult DML)
  • Klassifikatsioon taseme põhjal
    • STATEMENT-taseme päästik: see käivitatakse määratud sündmuse avalduse jaoks üks kord.
    • ROW-taseme päästik: see käivitatakse iga kirje puhul, mida määratud sündmus mõjutas. (ainult DML)
  • Klassifikatsioon sündmuse põhjal
    • DML-päästik: see käivitub, kui DML-sündmus on määratud (INSERT / UPDATE / DELETE)
    • DDL-i päästik: see käivitub, kui DDL-sündmus on määratud (CREATE / ALTER)
    • ANDMEBAASI päästik: see käivitub, kui andmebaasi sündmus on määratud (LOGON / LOGOFF / STARTUP / SHUTDOWN)

Nii et iga päästik on ülaltoodud parameetrite kombinatsioon.

Kuidas käivitada

Allpool on päästiku loomise süntaks.

CREATE [ OR REPLACE ] TRIGGER 
[BEFORE | AFTER | INSTEAD OF ][INSERT | UPDATE | DELETE… ]ON[FOR EACH ROW][WHEN ]DECLAREBEGINEXCEPTIONEND;

Süntaksi selgitus:

  • Ülaltoodud süntaks näitab erinevaid valikulisi käske, mis on päästiku loomisel.
  • BEFORE / AFTER määrab sündmuse ajastuse.
  • INSERT / UPDATE / LOGON / CREATE / jne. määrab sündmuse, mille päästik tuleb käivitada.
  • Klausel ON määrab, millisel objektil ülalnimetatud sündmus kehtib. Näiteks on see tabeli nimi, millel DML-i sündmus võib toimuda DML-käivitaja korral.
  • Käsk "IGA RIDA" määrab ROW-taseme päästiku.
  • WHEN-klausel täpsustab lisatingimuse, milles päästik peab käivituma.
  • Deklaratsiooni osa, täitmisosa, erandi käitlemise osa on sama mis teiste PL / SQL plokkide puhul. Deklaratsiooni osa ja erandite käsitlemise osa on valikulised.

: UUS ja: VANA klausel

Rea taseme päästikus käivitatakse päästik iga seotud rea kohta. Mõnikord on vaja teada väärtust enne ja pärast DML-i avaldust.

Oracle on nende väärtuste hoidmiseks andnud RECORD-taseme päästikule kaks klauslit. Nende lausete abil saame viidata päästiku keha vanadele ja uutele väärtustele.

  • : UUS - see hoiab päästiku käivitamisel uut väärtust põhitabeli / vaate veergude jaoks
  • : VANA - see hoiab päästiku käivitamise ajal põhitabeli / vaate veergude vana väärtust

Seda klauslit tuleks kasutada DML-i sündmuse põhjal. Allpool olevas tabelis täpsustatakse, milline klausel millise DML-i lause jaoks kehtib (INSERT / UPDATE / DELETE).

SISSE UUENDAMINE KUSTUTA
: UUS KEHTIV KEHTIV KEHTETU. Kustutamise puhul pole uut väärtust.
: VANA KEHTETU. Sisestähtedes pole vana väärtust KEHTIV KEHTIV

Käivitaja asemel

"Päästiku asemel" on päästiku eritüüp. Seda kasutatakse ainult DML-i käivitamisel. Seda kasutatakse juhul, kui kompleksvaates toimub mõni DML-i sündmus.

Mõelgem näitele, kus vaade tehakse kolmest põhitabelist. Kui selle vaate kaudu väljastatakse mõni DML-sündmus, muutub see kehtetuks, kuna andmed on võetud kolmest erinevast tabelist. Nii et selles kasutatakse päästikut INSTEAD. Käivitist INSTEAD OF kasutatakse baasitabelite vahetuks muutmiseks selle asemel, et modifitseerida antud sündmuse vaadet.

Näide 1 : Selles näites loome kahest põhitabelist keeruka vaate.

  • Tabel_1 on emp tabel ja
  • Tabel_2 on osakonna tabel.

Siis vaatame, kuidas päästikut INSTEAD OF kasutatakse selle detailvaate värskendamiseks asukoha üksikasjade avalduses. Samuti vaatame, kuidas: NEW ja: OLD on päästikute jaoks kasulikud.

  • 1. samm: tabelite 'emp' ja 'dept' loomine vastavate veergudega
  • 2. samm: tabeli täitmine näidisväärtustega
  • 3. samm: ülaltoodud tabeli vaate loomine
  • 4. samm: vaate värskendamine enne päästiku käivitamist
  • 5. samm: päästiku asemel selle loomine
  • 6. toiming: vaate värskendamine päästiku asemel

1. samm. Tabelite 'emp' ja 'dept' loomine vastavate veergudega

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));/

Koodi selgitus

  • Koodirida 1-7 : tabeli 'emp' loomine.
  • Koodirida 8-12 : tabeli 'osakonna' loomine.

Väljund

Tabel on loodud

2. samm. Nüüd, kui oleme tabeli loonud, täidame selle tabeli ülaltoodud tabelite näidisväärtuste ja vaadete loomisega.

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;/

Koodi selgitus

  • Koodirida 13-19 : andmete sisestamine tabelisse "osakond".
  • Koodirida 20–26: andmete sisestamine tabelisse „emp”.

Väljund

PL / SQL-i protseduur on lõpule viidud

Samm 3) Ülaltoodud tabeli vaate loomine.

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;

Koodi selgitus

  • Koodirida 27-32: vaate 'guru99_emp_view' loomine.
  • Koodirida 33: päringu guru99_emp_view küsimine.

Väljund

Vaade on loodud

TÖÖTAJA DEPT_NAME ASUKOHT
ZZZ HR USA
AAAA MÜÜK Suurbritannia
XXX RAHALINE Jaapan

4. samm . Vaate värskendamine enne päästiku asemel.

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

Koodi selgitus

  • Koodirida 34-38: värskendage "XXX" asukoht "FRANCE". See tõi erandi, kuna DML-i avaldused pole kompleksvaates lubatud.

Väljund

ORA-01779: veergu, mis kaardistatakse võtmeta säilitamata tabeliks, ei saa muuta

ORA-06512: liinil 2

5. etapp . Vigade vältimiseks eelmises etapis vaate värskendamisel kasutame selles etapis käiviti asemel käsku ".

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

Koodi selgitus

  • Koodirida 39: „UPDATE“ sündmuse INSTEAD OF loomine kuval „guru99_emp_view“ ROW-tasemel. See sisaldab värskenduslauset asukoha värskendamiseks baastabelis 'dept'.
  • Koodirida 44: Värskenduslause kasutab enne ja pärast värskendust veergude väärtuse leidmiseks ': NEW' ja ': OLD'.

Väljund

Käivitus on loodud

Samm 6) Vaate värskendamine päästiku asemel. Nüüd viga ei tule, kuna "päästiku asemel" tegeleb selle keerulise vaate värskendustoiminguga. Ja kui kood on täidetud, värskendatakse töötaja XXX asukohta "Jaapanist" "Prantsusmaa".

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

Koodi selgitus:

  • Koodirida 49–53: „XXX” asukoha värskendamine asukohaks „FRANCE”. See on edukas, kuna päästik „INSTEAD OF” on peatanud vaates tegeliku värskenduse avalduse ja värskendanud põhitabelit.
  • Koodirida 55: uuendatud kirje kontrollimine.

Väljund:

PL / SQL-i protseduur on edukalt lõpule viidud

TÖÖTAJA DEPT_NAME ASUKOHT
ZZZ HR USA
AAAA MÜÜK Suurbritannia
XXX RAHALINE PRANTSUSMAA

Ühendi päästik

Ühendi päästik on päästik, mis võimaldab teil määrata toiminguid kõigi nelja ajavõtupunkti jaoks ühes päästiku kehas. Neli erinevat ajastuspunkti, mida see toetab, on järgmine.

  • ENNE AVALDUST - tase
  • ENNE RIDA - tase
  • PÄRAST RIDA - tase
  • PÄRAST AVALDUST - tase

See annab võimaluse kombineerida erinevate ajastuste tegevused samaks päästikuks.

CREATE [ OR REPLACE ] TRIGGER 
FOR[INSERT | UPDATE | DELET… .]ON ‭ ‬BEFORE STATEMENT ISBEGIN;END BEFORE STATEMENT;BEFORE EACH ROW ISBEGIN;END EACH ROW;AFTER EACH ROW ISBEGIN;END AFTER EACH ROW;AFTER STATEMENT ISBEGIN;END AFTER STATEMENT;END;

Süntaksi selgitus:

  • Ülaltoodud süntaks näitab päästiku „COMPOUND” loomist.
  • Deklaratiivne sektsioon on tavaline kogu käivitamisploki täitmisbloki jaoks.
  • Need 4 ajastusplokki võivad olla mis tahes järjestuses. Kõiki neid 4 ajablokki pole kohustuslik omada. COMPOUND-päästiku saame luua ainult vajalike ajastuste jaoks.

Näide 1 : Selles näites loome käivitaja palgaveeru automaatselt täitmiseks vaikeväärtusega 5000.

CREATE TRIGGER emp_trigFOR INSERTON empCOMPOUND TRIGGERBEFORE EACH ROW ISBEGIN: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;

Koodi selgitus:

  • Koodirida 2-10 : liit-päästiku loomine. See on loodud ajastamiseks ENNE RIDA-taset, et sisestada palk vaikeväärtusega 5000. See muudab palga vaikeväärtuseks „5000” enne kirje tabelisse sisestamist.
  • Koodirida 11–14 : sisestage kirje tabelisse „emp”.
  • Koodirida 16 : sisestatud kirje kontrollimine.

Väljund:

Käivitaja on loodud

PL / SQL-i protseduur on edukalt lõpule viidud.

EMP_NAME EMP_NO PALK JUHT DEPT_NO
CCC 1004 5000 AAA 30

Käivitajate lubamine ja keelamine

Käivitajaid saab lubada või keelata. Päästiku lubamiseks või keelamiseks tuleb selle keelava või lubava päästiku jaoks anda käsk ALTER (DDL).

Allpool on päästikute lubamise / keelamise süntaks.

ALTER TRIGGER 
 [ENABLE|DISABLE];ALTER TABLE 
 [ENABLE|DISABLE] ALL TRIGGERS;

Süntaksi selgitus:

  • Esimene süntaks näitab, kuidas lubada / keelata üks päästik.
  • Teine lause näitab, kuidas lubada / keelata kõik päästikud konkreetses tabelis.

Kokkuvõte

Selles peatükis oleme õppinud tundma PL / SQL-i päästikuid ja nende eeliseid. Oleme õppinud ka erinevaid klassifikatsioone ja arutanud päästiku ja ÜHISE päästiku asemel.