Sunteți pe pagina 1din 17

O#ser.

a)ie1 Deoarece declanatoarele sunt executate dup regulile de integritate dac acestea nu sunt trecute atunci declanatorul nu este executat% ,entru ca un DECLANATOARE declanator s (ie executat tre#uie ca opera)ia n cau+ s nu (i euat%

Un declanator (trigger) este o procedur care este executat n !od i!plicit c"nd asupra ta#elului asociat se execut o co!and insert$ update sau delete% Co!ponentele unui declanator Declanatoarele Un declanator sunt !edii are prin trei co!ponente1 care &'L o(er progra!atorilor de aplica)ii i proiectantilor / o instruc)iune de de *D declarare s asigure 4aceasta integritatea speci(ic *D% instruc)iunile &'L care acti.ea+ Declanatoarele sunt utile deoarece i!pun reguli (ar a (i cuprinse n aplica)iile declanatorul2 utili+atorilor% / o restric)ie de ,roiectantul declanaredeclanatorului 4speci(ic condi)ia speci(ic care tre#ui i !o!entul s (ie ade.arat c"nd tre#uie pentru executat ca n raport declanatorul cu instruc)iunile s (ie acti.at2 L-D%&'L &er.er ia n sea!a regulile i .alorile i!plicite /nainte ac)iunea ca in(or!a)iile declanatorului s (ie care scrise speci(ic n *D% #locul de instruc)iuni care tre#uie executate% Acestea repre+int ,entru a crea pre/(iltre un declanator care pot s tre#uie i!piedice s (i)i!anipulrile posesorul *D% de Atunci date$ prin c"nd controlarea se adaug acti.it)ilor un declanator dinpentru cadrulo *D% coloana$ Un declanator linie sau ta#el poate se(i sc5i!# i un post/(iltru uneori icare !odul se execut de accesare dup i cu! interac)ionea+ o#iecte cu acesta% La (olosirea o#iectelor declanator se ce!odul !odi(icarea datelor a trecutalte de reguli% presupune Declanatorii respectarea per!it condi)iilor1 s execut! o procedur re+ident ori de c"te ori este executat o instruc)iune nu pot 0N&ERT$ (i create U,DATE pentru ta#ele sau DELETE te!porare$ asupra unui ta#el prede(init% / Declanatoarele Declanatoarele tre#uie s (ie createstocat nu!ai care1 pentru ta#ele din #a+a de date curent$ Declanatorul / este o procedur special / La eli!inarea unui ta#el$ anu!ite toate o#icetele declanator acest ta#el sunt$ / generea+ auto!at .alori ce deri. dinasociate .alorilecu coloanelor2 eli!inate / deter!in auto!at respectarea !preun restric)iilor cu ta#elul% i pri.ilegiilor 2 Crearea unui declanator se reali+ea+ cu instruc)iunea1 / (ace posi#il 3urnali+area transparent a e.eni!entelor2 / str"nge in(or!a)ii statistice n legtur cu accesarea ta#elelor% CREATE TR066ER Un declanator este onu!e7declanator procedur stocat special care este executat de &'L &er.er laON e(ectuarea 8 Nu!e7 unei ta#el opera)ii 9 Nu!e7 de inserare$ .ie: ; !odi(icare sau stergere% ,entru c declanatorii suntENCR?,T0ON executa)i dup e(ectuarea opera)iei de inserare$ !odi(icare sau tergere < =0T> @ ei repre+int 8 un (el de ulti! cu."nt la acestea% Dac un declanator respinge cererea$ !odi(icarea 8 8 AOR in(or!a)iilor 9 AATER este 9 0N&TEAD re(u+at$ iar OAaplica)ia ; 8 < 0N&ERT care a@ini)iat < $ @ < U,DATE opera)ia de)ine @ < $ @ un < !esa3 de eroare% Cea !ai@si!pl utili+are este deter!inat de i!punerea regulilor de integritate DELETE ; n *D% < =0T> A,,END @ < NOT AOR RE,L0CAT0ON @ A&

< 8 0A U,DATE ( coloana ) < 8 AND 9 OR ; U,DATE ( coloana ) @ < %%%n @ 9 0A ( COLU-N&7U,DATED ( ) 8 #it:ise7operator ; updated7#it!asB ) 8 operator de co!parare ; coloana7#it!asB < %%%n @ ;@ 0nstruc)iuni7&'L < %%%n @ ; ; &au ur!toarea (or! !ai si!pl CREATE TR066ER <posesor%@nu!e7declanator ON <posesor%@nu!e7ta#ela AOR 80N&ERT$ U,DATE$ DELETE ; <=0T> ENCR?,T0ON@ A& 0nstruc)iuni &'L

Nu!e7declanator este nu!ele declanatorului (trigger/ului)% Un nu!e de declanator tre#uie s respecte regulile pentru identi(icatori i tre#uie s (ie unic ncadrul unei #a+e de date% Nu!e7 ta#el 9 Nu!e7 .ie: este nu!ele ta#elului sau .ederii n care declanatorul este executat% 0N&ERT$ U,DATE$ DELETE acestea de(inesc scopul declanatorului opera)iile care ini)ia+ declanatorul% =0T> ENCR?,T0ON 4aceast op)iune este utili+at pentru a !piedica ca utili+atorii s citesc de(ini)ia declanatorului dup ncrcarea lui pe ser.er% &'L &er.er stoc5ea+ de(ini)ia unui declanator n (iierul &Csco!!ent% Criptea+ intrrile n ta#ela sCsco!!ents care con)ine textul co!en+ii CREATE TR066ER% AATER speci(ic (aptul c declanatorul este executat doar c"nd toate opera)iile din enun)ul &'L al declanatorului au (ost execuate cu succes% Toate ac)iunile re(eren)iale n cascad i .eri(icrile de constr"ngere dease!enea tre#uie s reuseasc nainte de executarea acestui trigger% Aolosirea clau+ei AATER este identic cu (olosirea clau+ei

AOR utili+at !ai !ult n ulti!ele .ersiuni de &'L &er.er% Declanatorii AATER nu pot (i de(ini)i pentru .ederi% 0N&TEAD OA &peci(ic (aptul c declanatorul este executat n locul enun)ului &'L declanat$ ast(el suprapun"nd opera)iile din enun)ul declanatorului% Acest tip de declanator poate (i de(init pentru un ta#el sau pentru o .edere c"nd se reali+ea+2 0N&ERT$ U,DATE sau DELETE% Este posi#il s de(ini! .ederi 0N&TEAD OA% 8 <DELETE@ <$@ <0N&ERT@ <$@ <U,DATE@ ; &unt cu.inte c5eie care speci(ic pentru ce opera)ie are loc declanatorul% Este o#ligatorie apari)ia cel pu)in a unei op)iuni% ,entru declanatori 0N&TEAD OA$ op)iunea DELETE nu este per!is pentru ta#elele care au legturi re(eren)iale ce speci(ic o ac)iune ncascad pentru op)iunea ON DELETE% Ase!ntor$ op)iunea U,DATE nu este per!is pe ta#ele care au legturi re(eren)iale ce speci(ic o ac)iune ncascad pentru op)iunea ON U,DATE% 0nstruc)iuni7sDl Repre+int condi)ia (condi)iile) i ac)iunea (ac)iunile) declanatorului% Ac)iunile declanatorului sunt scrise n Transact/&'L i pot cuprinde oric"te instruc)ini sau co!en+i Transact/&'L% C"te.a ta#ele speciale$ de care a! !ai a!intit$ sunt (olosite n instruc)iunea CREATE TR066ER i anu!e1 inserted i deleted% 0A U,DATE (coloana)Testea+ ac)iunea unei co!en+i 0N&ERT sau U,DATE pentru coloana speci(icat i nu este (olosit pentru DELETE% -ai !ulte coloane pot (i speci(icate% Deoarece nu!ele ta#elului este speci(icat dup clau+a ON$ nu este ne.oie s include! nu!ele ta#elului nainte de nu!ele coloanei n clau+a 0A U,DATE% ,entru a testa o adugare sau o !odi(icare pentru !ai !ulte coloane$ speci(ic! separat clau+a U,DATE(coloana) dup ce a! scris/o pe pri!a% 0A U,DATE .a returna .aloarea TRUE n ac)iunea 0N&ERT deoarece coloanele .or (i explicit sau i!plicit (NULL) inserate% Nota Clau+a 0A U,DATE (coloana) (unctionea+ identic cu 0A$ 0A%%%EL&E sau =>0LE poate (olosi i #locul *E60N%%%END% U,DATE(coloana) poate (i (olosit oriunde n corpul declanatorului% unde (iecare .edere s ai# propriul declanator

Coloana este nu!ele unei coloane pentru testarea ac)iunii 0N&ERT sau U,DATE% Aceast coloan poate a.ea orice tip de date &'L &er.er%Oricu! coloanele calculate nu pot (i utili+ate n acest context% 0A (COLOANA&7U,DATED()) Testea+$ dac ntr/un declanator 0N&ERT sau U,DATE$ coloanele !en)ionate au (ost inserate respecti. !odi(icate% COLOANA&7U,DATED returnea+ un tip .ar#inarC (tip #inar .aria#il) ce indic ce coloane din ta#el au (ost inserate sau !odi(icate% Aunc)ia COLOANA&7U,DATED returnea+ #i)ii n ordine de la stanga la dreapta$ cu cel !ai pu)in se!ni(icati. #it n partea cea !ai din st"nga% Cel !ai din st"nga #it repre+ent"nd pri!a coloana din ta#el$ ur!torul #it repre+ent"nd cea de/a dou coloan etc% COLOANA&7U,DATED returnea+ !ai !ul)i octe)i pentru declanatorul care a (ost creat con)in"nd !ai !ult de E coloane$ cu cel !ai pu)in se!ni(icati. #Cte n partea din st"nga% COLOANA&7U,DATED .a returna TRUE pentru toate coloanele din ac)iunea 0N&ERT deoarece coloanele au (ost inserate cu .alori explicite sau cu .alori i!plicite (NULL)% COLOANA&7U,DATED poate (i (olosit oriunde n corpul declanatorului% #it:ise7operator Opera)or pe #it (olosit n co!parri% Updated7#it!asB Este o !asc de tip ntreg pentru acele coloanele care toc!ai au (ost !odi(icate sau inserate% De exe!plu$ ta#ela tF con)ine coloanele CF$ CG$ CH$ CI$ i CJ% ,entru a .eri(ica dac coloanele CG$ CH$ i CI sunt toate !odi(icate (ta#ela tF a."nd un declanator U,DATE)$ speci(ic .aloarea FI (KFFFK)% ,entru a .eri(ica dac doar coloana CG este !odi(icat$ speci(ic .aloarea G(KKKFK)% Opera)or de co!parare%Este unul din operatorii de co!parare% Aolosi)i se!nul egal (L) pentru a .eri(ica dac toate coloanele speci(icate n updated7#it!asB sunt real!ente !odi(icate%Aolosi)i se!nul !ai !are (M) pentru a .eri(ica dac oricare sau c"te.a din coloanele speci(icate n updated7#it!asB sunt !odi(icate% Coloana7#it!asB Este o !asc de tip ntreg pentru acele coloane pentru care .eri(ic! dac ele au (ost !odi(icate sau inserate% &'L &er.er per!ite declanatori !ultiplii ce pot (i crea)i pentru (iecare e.eni!ent de !odi(icare de date (DELETE$ 0N&ERT$ or U,DATE)% De exe!plu$ dac este executat CREATE TR066ER AOR U,DATE pentru un ta#el care de3a are un declanator U,DATE$ atunci este creat un declanator adi)ional de tip U,DATE%

Exemplul 1 Declanator ce a(isea+ pe ecran un !esa3 c"nd se adaug sau se !odi(ic date din ta#ela Catalog 0A EN0&T& (&ELECT na!e ARO- sCso#3ects =>ERE na!e L Odeclan7!esa3 O AND tCpe L OTRO) DRO, TR066ER declan7!esa3 6O CREATE TR066ER declan7!esa3 ON Catalog AOR 0N&ERT$ U,DATE A& RA0&ERROR (O&/a executat un 0N&ERT sau un U,DATEO$ FP$ F) 6O 0N&ERT 0NTO Catalog QALUE& (OFKFO$OJO$R$OFF/FR/GKKPO) 6O U,DATE Catalog &ET NotaLJ =>ERE NrLegLOFKFO and Cod7disciplinaLOJO Exemplul 2 Acest declanator a(isea+ pe ecran anu!ite !esa3e pentru oricine ncearc s adauge sau s !odi(ice date din ta#elul Catalog 0A EN0&T& (&ELECT na!e ARO- sCso#3ects =>ERE na!e L O declanFO AND tCpe L OTRO) DRO, TR066ER declanF 6O CREATE TR066ER declanF ON Catalog AOR 0N&ERT$ U,DATE A& DECLARE SSnota integer$ SSNr7leg .arc5ar(J) &ELECT SSNr7leg L i%NrLeg$ SSnota L i%Nota ARO- Catalog C$ inserted i =>ERE C%NrLeg L i%NrLeg 0A (SSnota TJ )and(SSNr7leg liBe OFKFO)

*E60N RA0&ERROR (O&tudentul cu NrLegLFKF are nota TJO$ FP$ F) END EL&E *E60N RA0&ERROR (O&tudentul cu NrLegLUs are note de FP$ F$ SSNr7leg$ SSnota) END go 0N&ERT 0NTO Catalog QALUE& (OFKFO$OIO$P$OFF/KP/GKKPO) go 0N&ERT 0NTO Catalog QALUE& (OFKFO$OIO$G$OFG/KR/GKKPO) 6o U,DATE Catalog &ET NotaLJ =>ERE NrLegLOFKFO and Cod7!aterieLOIO go Exemplul 3 Declanator pentru tergeri i !odi(icri n ta#elul Catalog 0A EN0&T& (&ELECT na!e ARO- sCso#3ects =>ERE na!e L OdecFO AND tCpe L OTRO) DRO, TR066ER decF 6O CREATE TR066ER decF ON Catalog AOR 0N&ERT$ U,DATE A& DECLARE SSnota integer$ SSnota L i%Nota SSNr7leg .arc5ar(J) &ELECT SSNr7leg L i%NrLeg$ ARO- Catalog C$ inserted i =>ERE C%NrLeg L i%NrLeg Ud O$

0A (SSnota TJ )AND(SSNr7leg liBe OFKFO) *E60N RA0&ERROR (O&tudentul cu NrLegLFFF are Catalog TPO$ FP$ F) ROLL*ACV TRAN&ACT0ON END EL&E *E60N RA0&ERROR (O&tudentul cu NrLegLUs are Catalog de FP$ F$ SSNr7leg$ SSnota) ROLL*ACV TRAN&ACT0ON END go 0N&ERT 0NTO Catalog QALUE& (OFKFO$OJO$P$OFF/FK/GKKPO) 6o 0N&ERT 0NTO Catalog QALUE& (OFKFO$OJO$G$OFG/KF/GKKPO) go U,DATE Catalog &ET NotaLR =>ERE NrLegLOFKFO AND Cod7disciplinaLOIO go Exemplul 4 Declanator ce nu per!ite introducerea unor date ne.alide n Catalog 0A EN0&T& (&ELECT na!e ARO- sCso#3ects =>ERE na!e L O decGO AND tCpe L OTRO) DRO, TR066ER decG 6O CREATE TR066ER decG ON Catalog AOR 0N&ERT$ U,DATE A& DECLARE Snota integer &ELECT SnotaLCatalog%nota (ro! Catalog$ inserted =>ERE Catalog%NrLegLinserted%NrLeg 0A(SnotaTLK) or (SnotaMFK) *E60N Ud O$

RA0&ERROR (ONota in.alidaO$ FP$ F) ROLL*ACV TRAN&ACT0ON END go 0N&ERT 0NTO Catalog QALUE& (OFKGO$OIO$/G$OFG/KF/GKKPO) go &ELECT W ARO- Catalog =>ERE NrLegLOFKGO Exemplul 5 Declanator ce adaug F punct la orice not din ta#elul Catalog 0A EN0&T& (&ELECT na!e ARO- sCso#3ects =>ERE na!e L O decHO AND tCpe L OTRO) DRO, TR066ER decH 6O CREATE TR066ER decH ON Catalog AATER 0N&ERT A& U,DATE Catalog &ET Catalog%nota L Catalog%nota X F ARO- inserted =>ERE Catalog%NrLeg L inserted%NrLeg go 0N&ERT 0NTO Catalog QALUE& (OFKHO$OIO$I$OFG/KF/GKKPO) go &ELECT W ARO- Catalog =>ERE NrLegLOFKJO Exemplul 6 Declanator inlocuieste o opera)ie 0N&ERT cu opera)ia U,DATE din enun)ul &'L al declanatorului ast(el dac se doreste inserarea unei Catalog pentru un student la o anu!it !aterie se .a (ace o !odi(icarea adic se adaug F punct la nota introdus anterior la acea !aterie pentru studentul dat n ta#elul Catalog 0A EN0&T& (&ELECT na!e ARO- sCso#3ects =>ERE na!e L OdecHO AND tCpe L OTRO) DRO, TR066ER decH

6O CREATE TR066ER decH ON Catalog 0N&TEAD OA 0N&ERT A& U,DATE Catalog &ET Catalog%nota L Catalog%notaXF ARO- inserted =>ERE Catalog%NrLeg L inserted%NrLeg go 0N&ERT 0NTO Catalog QALUE& (OFKGO$OIO$I$OFG/KF/GKKPO) go &ELECT W ARO- Catalog =>ERE NrLegLOFKGO Exemplul7 Crearea unui declanator ce a(isea+ un !esa3 dac s/a !odi(icat Nota i un alt !esa3 nca+ contrar 0A EN0&T& (&ELECT na!e ARO- sCso#3ects =>ERE na!e L OdecIO YND tCpe L OTRO) DRO, TR066ER decI 6O CREATE TR066ER decI ON Catalog AOR U,DATE A& 0A U,DATE(Nota) RA0&ERROR (O&/a !odi(icat ca!pul NotaO$FP$F) EL&E RA0&ERROR (O&/a !odi(icat alt ca!p al ta#elei CATALO6O$FP$F) go U,DATE Catalog &ET NotaLFK =>ERE NrLegLOFKJO go &ELECT W ARO- Catalog =>ERE NrLegLOFKJO go U,DATE Catalog &ET Cod7!aterieLOHO =>ERE NrLegLOFKJO go

U,DATE Catalog &ET Cod7!aterieLOHO$ NotaLE =>ERE NrLegLOFKJO Exemplul 8 Crearea unui declanator care a(isea+ un !esa3 dac s/au !odi(icat Cod7disciplina i ZWWWWW[ nca+ contrar 0A EN0&T& (&ELECT na!e ARO- sCso#3ects =>ERE na!e L OdecJO AND tCpe L OTRO) DRO, TR066ER decJ 6O CREATE TR066ER decJ ON Catalog AOR U,DATE A& 0A U,DATE(Nota) AND U,DATE(Cod7diciplina) RA0&ERROR(O&/au !odi(icat atri#utele Nota i Cod7disciplinaO$FP$F) EL&E RA0&ERROR (OWWWWWO$FP$F) go U,DATE Catalog &ET NotaLFK =>ERE NrLegLOFKJO go &ELECT W ARO- Catalog =>ERE NrLegLOFKJO go U,DATE Catalog &ET Cod7diciplina LOHO$ NotaLE =>ERE NrLegLOFKJO Exemplul 9 Crearea unui declanator care a(isea+ un !esa3 dac s/au !odi(icat atri#utele Nota sau Cod7disciplina i ZW%W%W[ n ca+ contrar% 0A EN0&T& (&ELECT na!e ARO- sCso#3ects =>ERE na!e L OdecPO AND tCpe L OTRO) DRO, TR066ER decP 6O CREATE TR066ER decP ON Catalog AOR U,DATE Nota i

A& 0A (COLOANA&7U,DATED()\P)MK RA0&ERROR (O&/au !odi(icat atri#% Nota sau Cod7!aterieO$FP$F) EL&E RA0&ERROR (OW%W%WO$FP$F) go U,DATE Catalog &ET NotaLFK =>ERE NrLegLOFKJO go &ELECT W ARO- Catalog =>ERE NrLegLOFKJO go U,DATE Catalog &ET Cod7!aterieLOHO$ NotaLE =>ERE NrLegLOFKJO go U,DATE Catalog &ET DataLOH/H/GKKGO =>ERE NrLegLOFKJO Exemplul 9 Crearea unui declanator care .eri(ica dac au (ost !odi(icate printr/o co!anda U,DATE coloanele H$ P i ] din ta#elul &tudent 0A EN0&T& (&ELECT na!e ARO- sCso#3ects =>ERE na!e L OdecRO AND tCpe L OTRO) DRO, TR066ER decR 6O CREATE TR066ER decR ON &tudent AOR U,DATE A& 0A ( (&U*&TR0N6(COLOANA&7U,DATED()$F$F)Lpo:er(G$(H/F))//coloana HX po:er(G$(P/F))) //coloana P AND (&U*&TR0N6(COLOANA&7U,DATED()$G$F)Lpo:er(G$(F/F)))//coloana ] (coloana F din cel de/al 00/lea octet ) ,R0NT OColoanele H$ P i ] au (ost !odi(icateO 6O U,DATE &tudent &ET 0nitialaLOOO$ Data7nastereLOFG/FG/F]EKO$ NrLeg7sotLOFKJO =>ERE NrLegLOFKJO 6O &ELECT W ARO- &tudent =>ERE NrLegLOFKJO Exemplul 10 Crearea unui declanator pentru DELETE

0A EN0&T& (&ELECT na!e ARO- sCso#3ects =>ERE na!e L Osterge7studO YND tCpe L OTRO) DRO, TR066ER sterge7stud 6O CREATE TR066ER sterge7stud ON &tudent AOR DELETE A& DECLARE SNL .arc5ar(J) &ELECT SNLLdeleted%NrLeg ARO- deleted 0A (cast(SNL as integer)MK) ,R0NT O&/a &tersO EL&E *E60N ,R0NT OAcest NrLeg nu existaO ROLL*ACV TRAN&ACT0ON END 6O DELETE ARO- &tudent =>ERE NrLegLOFRO -odi(icarea unui declanator se (ace cu co!anda ALTER TR066ER care are sintaxa1 ALTER TR066ER nu!e7declan ON ( ta#le 9 .ie: ) < =0T> ENCR?,T0ON @ 8 8 ( AOR 9 AATER 9 0N&TEAD OA ) 8 < DELETE @ < $ @ < 0N&ERT @ < $ @ < U,DATE @ ; < NOT AOR RE,L0CAT0ON @ A& sDl7state!ent < %%%n @ ; 9 8 ( AOR 9 AATER 9 0N&TEAD OA ) 8 < 0N&ERT @ < $ @ < U,DATE @ ;

< NOT AOR RE,L0CAT0ON @ A& 8 0A U,DATE ( coloana ) < 8 AND 9 OR ; U,DATE ( coloana ) @ < %%%n @ 9 0A ( COLOANA&7U,DATED ( ) 8 #it:ise7opera)or ; updated7#it!asB ) 8 co!parison7opera)or ; coloana7#it!asB < %%%n @ ; sDl7state!ent < %%%n @ ; ; tergerea unui declanator se (ace cu co!anda1

DRO, TR066ER 8 nu!e7declan ; < $%%%n @

Un declanator poate s con)in oric"te instruc)iuni cu condi)ia s (ie ncadrate ntr/un #loc *egin^END% La executarea unui declanator &'L ser.erul accesea+ o ta#el special cu datele ce au deter!inat rularea declanatorului%Aceasta ta#el este 0N&ERTED pentru opera)iile 0N&ERT i U,DATE i respecti. DELETED pentru opera)iile DELETE i U,DATE% Deoarece un declanator este executat ntotdeauna dup opera)ie$ liniile din 0N&ERTED repre+int ntotdeauna o du#lur a uneia sau a !ai !ultor nregistrri din ta#ela de #a+%

Restric)ii de utili+are a declanatorilor

&'L/&er.erul i!pune anu!ite restric)ii asupra tipurilor de instruc)iuni care pot (i executate n cadrul unui declanator% -a3oritatea restric)iilor sunt deter!inate de

i!posi#ilitatea de anulare a consecin)elor unei opera)ii insert$ update sau delete% _n corpul unui declanator nu poate apare nici una din instruc)iunile1 / CREATE DATA*A&E$ CREATE TA*LE 0NDEN$ ,ROCEDURE$ DEAAULT$ RULE$ TR066ER i Q0E=%

/ /

toate instruc)iunile DRO,2 instruc)iunile de !odi(icare a o#iectelor din #a+ ALTER TA*LE$ ALTER DATA*A&E i TRUNCATE TA*LE2

/ / / / /

U,DATE &TAT0&T0C&2 Opera)ii de ncrcare a *D LOAD DATA*A&E i LOAD TRAN`ACT0ON2 Toate instruc)iunile care reali+ea+ !odi(icri (i+ice pe disc1D0&V% Crearea de (iiere te!porare (ie i!plicita (ie prin &ELECT2 Nu se poate crea un declanator pentru o .edere ci nu!ai pentru ta#el de #a+ care de(inete .ederea% -anipularea unor coloane care con)in #loc nu deter!in execu)ia unui declanator%

Tipuri de declanatoare

Atunci c"nd se creea+ un declanator se speci(ic de c"te ori se execut% Exist G tipuri de declanatoare1 /Declanator linie 4care se execut ori de c"te ori ta#elul este a(ectat de instruc)iunea declanatoare% Dac o instruc)iune U,DATE actuali+ea+ GK de linii$ declanatorul se execut de GK de ori% Dac instruc)iunea nu a(ecte+ nici o linie declanatorul nu este executat% /Declanatorul instruc)iune este executat o singur dat pentru instruc)iunea declanatoare% De exe!plu dac este executat o instruc)iune U,DATE care actuali+ea+ FK linii este executat o singur dat Declanatorele 0N&ERT i U,DATE sunt utile pentru ca i!pun restric)iile re(eren)iale i asigur .alidarea datelor nainte de a le scrie n ta#ele% De o#icei se (olosete pentru a .eri(ic dac datele ur!rite satis(ac anu!ite criterii% La declanatoare se apelea+ nu!ai c"nd criteriile de integritate sunt (oarte co!plete% Declanatorul de !ai 3os este acti.at ori de c"te ori se nserea+ sau se !odi(ic o nregistrare n ta#elul ."n+ri%

CREATE TR066ER ins7.an+ari ON .an+ari AOR 0N&ERT$U,DATE A& DECLARE S+idinluna tinCint &ELECT S+idinlunaLData,art(DaC$ iData7co!en+i) ARO- .an+ari .$ 0nserted i =>ERE .%star7idLi%star7id AND .%nr7co!Li%nr7co! AND .%denu!ireLi%denu!ire 0A S+idinlunaMFJ *egin ROLL*ACV END 6O CREATE TR066ER eli!art ON articole AOR DELETE A& AOR EAC> ro: =>ERE (pretart)TFKK DELETE END CREATE TR066ER ins%art ON articol AOR 0N&ERT AOR EAC> ro: *E60N 0N&ERT 0NTO art

END

&e poate crea declanatorul care s reac)ione+e dac se !odi(ic doar o coloan% 0nstruc)iunea 0A update poate (i utili+at ntr/un declanator pentru a decide dac se con)inu execu)ia acestuia%

0A U,DATE (pre) )AND (SSro: COUNTLF) *E60N / / END 0n acest ca+ #locul se execut nu!ai dac s/a !odi(icat coloana pret %-odi(icarea unei coloane nu nsea!n neaprat sc5i!#area .alorii ei%

Declanatoare pentru stergere &e (olosesc pentru a pre.eni tergerea acolo unde acestea ar a(ecta integritatea datelor (Este exe!plul c5eilor strine pentru alte ta#ele% Al doilea este tergerea unui articol n cascad care s eli!ine nregistrrile copie ale unei nregistrri particulare )

CREATE TR066ER sterg ON .an+ri AOR DELETE A& 0A SSro: COUNTMF aW.eri(ica nr de linii a(ectate i!piedic"nd

stergerea a !ai !ult de o linieWa *E60N ROLL*ACV RA0&ERROR(Zputeti sterge o singur instruc)iune la un !o!ent dat[$FP$ FK) END DECLARE Sstare7id c5ar(I) &ELECT Sstare7idLs%stare/id

ARO- .an+ri . deleted s 0A EN0&T (&ELECT W ARO- .an+ri =>ERE stare7idLSs%stare7id) *E60N ROLL*ACV RA0&ERROR(Znu poate (i sters[$FP$FK) END 6O

S-ar putea să vă placă și