oracl projet
TRANSCRIPT
-
8/9/2019 oracl projet
1/18
Rapport de Mini-Projet:
Ralis par : Mr Adnane AL ECHCHEIKH EL ALAOUI Mr Alaa Eddine JADDAD Mr Adil SALIM
Encadr par :Mr B. RIYAMI
Filire:Ingnierie du logiciel et multimdiaMatire : SGBD
Anneuniversitaire2009/2010
-
8/9/2019 oracl projet
2/18
2
-
8/9/2019 oracl projet
3/18
3
Sommaire1 Introduction ..................................................................................................................................................... 42 Gnralits ...................................................................................................................................................... 5
2.1 Dfinition ............................................................ ...................................................................... ............. 52.2 quoi sert un dclencheur ? ................................................................................................................. 52.3 Triggers dans SQL3 ........................................................ .................................................................... ... 62.4 Database trigger ........................................................ ................................................................ ............. 62.5 Mcanisme gnral ............................................................... ................................................................. 72.6 Utilisation des triggers ...................................................... .................................................................. ... 7
2.6.1 Mise jour de donnes ...................................................................... ................................................ 72.6.2 Duplication des donnes ................................................................... ................................................. 7
2.6.3
Intgrit tendue des donnes............................................................................................................ 8
2.6.4 Scurit tendue des donnes ........................................................................... ................................. 82.6.5 Ou encore ...................................................................................................................................... 8
3 Conception des triggers ............................................................ .................................................................... ... 94 Types des triggers (Oracle) ............................................................................................................................. 9
4.1 Trigger LMD ....................................................................................................................................... 104.2 Constitution dun trigger ..................................................................................................................... 10
4.2.1 Dfinition de dclenchement ......................................................................... .................................. 104.2.2 Syntaxe ............................................................... ................................................................. ............ 104.2.3 Option FOR EACH ROW ................................................................. .............................................. 124.2.4 Restriction de dclenchement .......................................................................... ................................ 124.2.5 Action dclencher ........................................................ ............................................................... .. 124.2.6 Cration dun trigger LMD ............................................................................................................. 12
4.2.7 Utilisation des pseudos colonnes ................................................................. .................................... 154.2.8 Regroupement dvnements dclencheurs .................................................................................... 164.2.9 Modification d'un trigger .................................................................... ............................................. 164.2.10 Suppression d'un trigger ............................................................ .................................................. 164.2.11 Vues du dictionnaire ................................................................................................................... 164.2.12 Lecture inconsistante, table en mutation et transaction autonome .............................................. 174.2.13 Trigger INSTEAD OF ................................................................................................................ 17
5 Conclusion .................................................................................................................................................... 18
-
8/9/2019 oracl projet
4/18
4
1 IntroductionTraditionnellement lesbasesdedonnessontdessystmess'occupantdedonnes
statiques.LesSGBDsontresponsablesdelagestiondedonnessousformedetables,
respectant des rgles prdfinies dans leurs propres structures. Les systmesassurent une gestion des donnes scurises et supportant des accs concurrents
grceuneparfaitematrisedes transactions. La largediffusiondumodleclient
serveurpour lesbasesdedonnesestprincipalementdue lamaturitdesSGBD
actuels. L'autonomie du SGBD (scurit, rgle et transaction) a permis la mise en
placeduconceptduserveurdedonnes;leserveurfourniauxdiffrentsproducteurs
ou consommateurs de donnes des informations scurises et fiables avec un
maximumdedisponibilit.Lamonteenpuissancedu"service"gestiondesdonnes
peut
tre
assure
assez
simplement
par
un
passage
l'chelle
du
mme
systme.
L'efficacit des serveurs sous les fortes sollicitations nous permet de formuler de
nouvellesexigencesetdeconstaterquelesbasesdedonnesactuellessontcapables
decomportementsdynamiques.
Prenons par exemple une base de donnes grant un stock de pices et pouvant
comporterdanssonschmaunerglepermettantsonrapprovisionnementpartir
d'unseuilprdfini.
Cesystmencessitedeuxprocessusdistincts,soitladtectionduseuilminimum,et
l'actionderapprovisionnementellemme,ensuivantunprocessusprdfini (une
rglemtier).
L'vnementdoittrecatalogudanslabaseellemmepourpermettresadtection
indpendammentduclient.Sapuissancededescriptiondpenddespossibilitsdu
SGBDutilis.
Quant l'action,elledoitpouvoirtredcriteavecun langagedeprogrammation
completpermettantlamanipulationnativedesdonnes.Idalement,celangagedoit
tre capable d'intgrer SQL pour la gestion des donnes et permettre une
programmation classique pour assurer la compltude du langage. Le langage,
suffisamment puissant, permettrait une interaction avec les autres services du
systme,soitavecundialogueSQL,soitavecdesdialoguesdegenreRPC.
Afin dassurer ces comportements dynamiques, les SGBD actuels permettent
lutilisationdedclencheurs.
-
8/9/2019 oracl projet
5/18
5
2 Gnralits
2.1 DfinitionUndclencheur(trigger)estuneactionstockedanslabaseetassocieunetable.
Lasuited'instructionsqueconstituecetteactionestexcuteautomatiquementpar
lesystmedegestiondebasededonnes,chaquefoisquel'vnementauquelelle
estassocieseproduit.
Lesdclencheurs(triggers)existentdepuislaversion6dOracle.Ilssontcompilablesdepuis laversion7.3 (auparavant, ilstaientvalus lorsde lexcution).Depuis la
version8,ilexisteunnouveautypededclencheur(INSTEADOF)quipermetlamisejourdevuesmultitables.Laplupartdesdclencheurspeuventtrevuscommedesprogrammes rsidents associs unvnementparticulier (insertion,modificationduneoudeplusieurscolonnes,suppression)surunetable (ouunevue).Unetable(ouunevue)peuthbergerplusieursdclencheursouaucun.Nousverronsquilexistedautrestypesdedclencheursqueceuxassocisunetable (ouunevue)afin de rpondre des vnements qui ne concernent pas les donnes. ladiffrence des sousprogrammes, lexcution dun dclencheur nest pasexplicitementopreparunecommandeoudansunprogramme,cestlvnementde mise jour de la table (ou de la vue) qui excute automatiquement le codeprogrammdansledclencheur.Onditqueledclencheursedclenche(langlaisle traduitmieux : fired trigger).Lamajoritdesdclencheurs sontprogrammsenPL/SQL (langage trs bien adapt la manipulation des objets Oracle), mais il estpossibledutiliserunautrelangage(CouJavaparexemple).
2.2 quoi sert un dclencheur ?Undclencheurpermetde: Programmertoutes lesrglesdegestionquinontpasputremisesenplacepar
descontraintesauniveaudestables.Parexemple, lacondition :unecompagnienefaitvolerunpilotequesilatotalisplusde60heuresdevoldansles2derniersmoissur le typedappareilduvolenquestion,nepourrapastreprogrammeparunecontrainteetncessiteralutilisationdundclencheur. Dporterdescontraintesauniveauduserveuretallgerainsi laprogrammaonclient. Renforcerdesaspectsdescuritetdaudit. Programmer lintgrit rfrenelle et la rplicaon dans des architecturesdistribuesaveclutilisationdeliensdebasesdedonnes(databaselinks).
-
8/9/2019 oracl projet
6/18
6
2.3 Triggers dans SQL3LestriggersdebasededonnessontnormalissparlanormeSQL3.LanormeSQL2dcrivait lanotiond'assertion,quiressemblecelledutrigger.Une
assertionestunerglenonrattacheunetable,quidoittrerespecte,quellesquesoientlesinstructionsenvoyesausystme.Exemple:
CREATE ASSERTION val_globale_stockCHECK ( (SELECT Sum(colonne) FROM table1)>(SELECT Sum(colonne) FROM table2) ) ;
Lesassertionsconstituentunenotionintressantemaisquin'estpasimplantedansles bases de donnes commerciales qui prfrent la notion de triggers. On peut
penser que c'est principalement cause des problmes de temps de rponsequengendreraitunegestionglobaledesassertions.LanormeSQL3normalise lanotiondetriggersousunesyntaxetrsprochedecelledOracle.
2.4 Database triggerLesSGBDdumarchimplmententlanotionde"databasetrigger".Cettenotion,nonnormalise engendre des objets relativement similaires chez les diffrentsconstructeurs.Les triggers sont gnralement des objets, appartenant une table, permettantd'excuteruneprocdurelorsqu'unvnementprdfiniestproduitsurcettemmetable.
Ladfinitiondudclencheurestsimilaired'unSGBD l'autre,mais l'action,dcritedans un langage de programmation souvent propritaire du SGBD, est totalementdpendantedesonpouvoirdedescription.Il faut remarquerencoreque la listeexhaustivedesdclencheurs supportspar le
SGBDpeuttrediffrented'unsystmel'autre,maisunenouvelleversiondummeSGBDpeutsupporterdenouveauxvnements.
En bref, les triggers sont des procdures stockes dans la base de donnes etimplicitementexcutesoutires(triggered)quandunvnementseproduit.Traditionnellementl'vnementestunecriture(INSERTUPDATE,DELETE)dansunetable.
-
8/9/2019 oracl projet
7/18
7
2.5 Mcanisme gnralLafiguresuivanteillustrelestapessuivrepourmettreenuvreundclencheur.Ilfautdabord lecoder (commeunsousprogramme),puis lecompiler (ilserastockainsienbase).Par lasuite,aucoursdutemps,etsi ledclencheurestactif(nousverronsquilestpossible de dsactiver un dclencheur mme sil est compil), chaque vnement(quicaractriseledclencheur)aurapourconsquencesonexcution.
2.6 Utilisation des triggersLestriggersserventgarantir l'excutiond'unetcheetcentraliser lesoprationssans s'occuper de qui les dclenchent ni d'o elles se dclenchent puisqu'elles se
trouventdanslabasededonnes.
2.6.1 Mise jour de donnesLors de l'effacement de donnes, on peut stocker automatiquement les valeurseffaces dans une table journal. L'effacement devient alors logique. Une autreutilisationclassiqueestlagestiondechampsdrivs(champscalculs).
2.6.2 Duplication des donnes
-
8/9/2019 oracl projet
8/18
8
Laduplicationdedonnes,pourdesraisonsdeperformancesurunebasedistribuespeuttrefaiteavecdestriggers.Onpeutfacilementgrerunerplicationsynchroneasymtrique.
2.6.3
Intgrit tendue des donnes
La gestion de l'intgrit des donnes peut tre faite avec des triggers,particulirement dans les cas o elle ne peut tre assure par des contraintesdclaratives. Toutefois, les triggers ne doivent pas se substituer au systmedintgritnatifduSBBDpourdesraisonsdeportabilit.Ilest importantdenoterque si les triggerspeuventgrer l'ensemblede lintgritdes donnes de la base, mais les contrles s'appliquent au niveau de la seuletransaction.Ilsnecontrlentdoncpaslesdonnesexistantes.
2.6.4 Scurit tendue des donnesOn peut galement grer les droits d'accs aux donnes avec des triggers,particulirementsiceuxcinepeuventtretraitspar lescommandesclassiquesdegestiondesdroits.
2.6.5 Ou encoreAuditcomplexe
Prventiondetransactionsinvalides
Renforcementderglesdegestioncomplexes
Miseenplaced'vnementsdeconnexiontransparents
Gnrationautomatiquedecolonnesdrives
Miseenplacedevuesmodifiablescomplexes
Rplication synchrone symtrique de donnes entre un systme legacy et unnouveausystmeencoursdedveloppement
Surveillanced'vnementsystmes
-
8/9/2019 oracl projet
9/18
9
3 Conception des triggersIlestimportantdesuivrelesquelquesrglescidessouslorsdudesigndestriggers.
Utiliser
les
triggers
pour
excuter
des
oprations
de
faon
centralise,
ceci
quelquesoitlegenredeclientoudapplicationconnecte.
Limiter la tailleducorpsdu trigger60 lignesdecodeaumaximum.Si latailledoittredpasse,utiliserletriggerpourappeleruneprocdurestocke(lecorpsduntriggernepeutdpasser32Ko).
NepasdvelopperdestriggersquiduplifientdesfonctionnalitsexistanteduSGBD(ex:Intgritrfrentielle).
Nepascrerdestriggersrcursifs!!!!(Excutiondel'actionquidclencheletriggerdanslecorps).
Utiliserjudicieusementlestriggerssurlabasededonnes.Ilssontexcutspourchaqueutilisateurchaquefoisquel'vnementseproduit.
Respecterlestransactions!
Utiliseravecprcaution(difficiledebuggeretmaintenir)
4 Types des triggers (Oracle)Untriggerpeuttredeplusieurstypes:
TriggerLMDsurunetable
TriggerINSTEADOFsurunevue
TriggersystmesurDATABASEouSCHEMA
Remarque:
Lesvnementsdclencheurspeuventtre: UneinstructionINSERT,UPDATE,ouDELETEsurunetable(ouunevue).OnparlededclencheursLMD; UneinstructionCREATE,ALTER,ouDROPsurunobjet(table,index,squence,etc.).
OnparlededclencheursLDD;
-
8/9/2019 oracl projet
10/18
10
ledmarrageoularrtdelabase(startupoushutdown),uneerreurspcifique(NO_DATA_FOUND,DUP_VAL_ON_INDEX,etc.),uneconnexionouunedconnexiondunutilisateur.Onparlededclencheursdinstances.
4.1 Trigger LMDLestriggersduLMDsontlespluscourants.Onlestrouvepresquesystmatiquementchezchaqueconstructeur.
4.2 Constitution dun triggerLa constitution d'un trigger est diffrente d'un constructeur l'autre, mais onretrouveglobalementlesmmeslmentsdanslesdiffrentessyntaxes.Untriggerestconstitudetroispartiesdistinctes:
4.2.1 Dfinition de dclenchementCettepartiedclare le triggeren luidonnantun identificateur (uniqueau schma)ainsiqu'unvnementdclencheur.Cetvnementdclencheurestunecriture(INSERTUPDATE,DELETE)danslatablequiluiestassocie.
On
dfinit
galement
si
le
trigger
sera
dclench
avant
ou
aprs
l'criture
dans
la
tableaveclesoptionsBEFOREetAFTER.
4.2.2 SyntaxeRemarque:Conventionsdcriture.
Exemples,syntaxeMAJUSCULESCommandesSQLItaliquesVariablesdesubstitution[]Elmentfacultatif
{}ListedechoixSparateurdansunelistedechoixNB:LesexemplesetsyntaxesdecesupportdecourssontspcifiqueslabasededonnesOracle10g.Nousspcifieronslorsquunexemplefaitrfrencelanorme.
Pour pouvoir crer un dclencheur dans votre schma, vous devez disposer duprivilge CREATE TRIGGER (qui est inclus dans le rle RESOURCE mais pas dansCONNECT). Pour crer un dclencheur dans un autre schma, le privilge CREATE
ANYTRIGGER
est
requis.
-
8/9/2019 oracl projet
11/18
11
Enplusdecesconditions,pourfabriquerundclencheurdinstances,ilfautdtenirleprivilgeADMINISTERDATABASETRIGGER.Undclencheurestcomposdetroisparties:ladescriptiondelvnementtraqu,uneventuelle restriction (condition)et ladescriptionde laction raliser lorsque
lvnement
se
produit.
La
syntaxe
de
cration
dun
dclencheur
est
la
suivante
:
CREATE[ORREPLACE]TRIGGER[schma.]nomDclencheur{BEFORE|AFTER|INSTEADOF}{{DELETE|INSERT|UPDATE[OFcol1[,col2]]}[OR{DELETE|INSERT|UPDATE[OFcol1[,col2]]}]ON{[schma.]nomTable|nomVue}[REFERENCING{OLD[AS]nomVieux|NEW[AS]nomNew|PARENT[AS]nomParent}
[OLD[AS]nomVieux|NEW[AS]nomNew|PARENT[AS]nomParent]][FOREACHROW]}|{vnementBase[ORvnementBase]|actionStructureBase[ORactionStructureBase]}ON{[schma.]SCHEMA|DATABASE}}[WHEN(condition)]{BlocPL/SQL(variablesBEGINinstructionsEND;)|CALLnomSousProgramme(paramtres)}
Lesoptionsdecettecommandesontlessuivantes: BEFORE|AFTER|INSTEADOFprciselachronologieentrelaconraliserparledclencheur LMD et la ralisation de lvnement (exemple BEFORE INSERTprogrammeralexcutiondudclencheuravantderaliserlinsertion). DELETE|INSERT|UPDATEprciselanaturedelvnementpourlesdclencheursLMD. ON {[schma.] nomTable | nomVue} spcifie la table, ou la vue, associe audclencheurLMD.
REFERENCING
permet
de
renommer
des
variables.
FOREACHROWdiffrencielesdclencheursLMDauniveauligneouauniveautat. vnementBase idenfie la nature dun dclencheur dinstance (STARTUP ouSHUTDOWNpourexcuterledclencheuraudmarrageoularrtdelabase),dundclencheurderreurs(SERVERERRORouSUSPENDpourexcuterledclencheurdanslecasduneerreurparticulireouquandunetransactionestsuspendue)oudundclencheurdeconnexion(LOGONouLOGOFFpourexcuterledclencheurlorsdelaconnexionoudeladconnexionlabase). aconStructureBasespcifielanaturedundclencheurLDD(CREATE,ALTER,
-
8/9/2019 oracl projet
12/18
12
DROP, etc. pour excuter par exemple le dclencheur lors de la cration, lamodificationoulasuppressiondunobjetdelabase). ON {[schma.]SCHEMA | DATABASE}} prcise le champ dapplicaon dudclencheur (de type LDD, erreur ou connexion). Utilisez DATABASE pour les
dclencheurs
qui
sexcutent
pour
quiconque
commence
lvnement,
ou
SCHEMA
pourlesdclencheursquinedoiventsexcuterquedansleschmacourant. WHENcondionnelexcuondudclencheur.
4.2.3 Option FOR EACH ROWCetteoptiondfinitsiletriggerestuntriggerdeligneoud'instruction.Silestdfinitcommetriggerdeligne,lecorpsdutriggerseraexcutpourchaquetuple"touch"parl'instructionquiadclenchletrigger.Si letriggerestuntriggerd'instruction,ilsera dclench une et une seule fois, indpendamment du nombre de tuplesmanipulsparl'instruction.LaplupartdestriggerssontspcifisavecloptionFOREACHROWdanslapratique.
4.2.4 Restriction de dclenchementCettepartieoptionnellepermetd'ajouteruneclause (WHEN)quiseravalueet letriggerexcutquesiellerenvoielavaleurVrai.Si cette clause est absente, le trigger est toujours excut. La clause WHEN estrvalue lorsdechaquedclenchementdutrigger.SicelleciretourneunFalseouuntatinconnu(Null)alorsletriggern'estpasexcut.
4.2.5 Action dclencherOn l'appelle aussi corps du trigger. C'est l'action excuter lorsque l'vnementassociseproduit.Cettesuited'instructionsestcritedansunlangagesupportparlabasededonnes.Oracle supporte en natif son propre langage appel PL/SQL, ainsi que lappel deprocdurescompilescritesdansunautrelangage(C,C++,Java,...)
4.2.6 Cration dun trigger LMDPour ce type de dclencheurs, lvnement dterminer est une mise jourparticulire de la base (ajout, modification ou suppression dans une table ou unevue). Lexcution est dpendante ou non du nombre de lignes concernes parlvnement.Onprogrammeundclencheurdelignes(rowtrigger)quandondsireexcuterautantdefoisledclencheurquilyadelignesconcernesparunemisejour.Siondsireexcuteruneseulefois ledclencheurquelquesoit lenombredelignesconcernes,onutiliseraundclencheurdtat(statementtrigger).
LadirectiveFOREACHROWdistinguecesdeuxfamillesdedclencheurs.
-
8/9/2019 oracl projet
13/18
13
Dans lexemple dune table t1 ayant cinq enregistrements, si on programme undclencheurdeniveauligneaveclvnementAFTERDELETE,etquonlanceDELETEFROMt1, ledclencheurexcuteracinqfoisses instructions(unefoisaprschaquesuppression).Letableausuivantexpliquecemcanisme:
Dclencheurs de lignes (row triggers)
Undclencheurde lignesestdclaravec ladirectiveFOREACHROW.Cenestquedansce typededclencheurquonaaccsauxanciennesvaleursetauxnouvellesvaleursdescolonnesdelaligneaffecteparlamisejourprvueparlvnement
Quand utiliser la directive :NEW ?
Considrons lexemple suivant, et programmons la rgle de gestion tout pilote ne
peut tre qualifi sur plus de trois types dappareils. Ici, il sagit dassurer lacohrenceentrelavaleurdelacolonnenbQualifdelatablePiloteetleslignesdelatable Qualifications. Programmons le dclencheur TrigInsQualif qui surveille lesinsertionsarrivantsurlatableQualificationsetincrmentede1lacolonnenbQualifpour le pilote concern, ou refuse linsertion pour le pilote ayant dj troisqualifications(casdupilotedecode'PL1'danslafiguresuivante).
LvnementdclencheuresticiBEFOREINSERTcarilfaudrasassurer,avantdefairelinsertion,que lepilotenestpasdjqualifisurtroistypesdappareils.OnutilizeundclencheurFOREACHROWcarondsirequilsexcuteautantdefoisquilyade lignes concernes par lvnement dclencheur. Sil se produit une insertionmultipledetypeINSERTINTOQualificationsSELECT,onprfrelancerplusieursfoisledclencheur.
Chaque enregistrement qui tente dtre ajout dans la table Qualifications estdsign par :NEW au niveau du code du dclencheur. Laccs aux colonnes de ce
pseudoenregistrementdanslecorpsdudclencheursefaitparlanotationpointe.
-
8/9/2019 oracl projet
14/18
14
Lecodeminimaldecedclencheur(onneprendpasencompte lventuelleerreurduSELECTnerenvoyantaucunpilote).estdcritdansletableausuivant:
CodePL/SQL Commentaires
CREATE
TRIGGER
TrigInsQualif
BEFOREINSERTONQualificationsFOREACHROW
Dclaration
de
lvnement
dclencheur
DECLAREv_compteurPilote.nbHVol%TYPE;v_nomPilote.nom%TYPE;
Dclarationdesvariableslocales.
BEGINSELECT nbQualif, nom INTO v_compteur,v_nomFROMPiloteWHEREbrevet=;
IFv_compteurINSERTINTOQualificationsVALUES('PL2','A380',
'20
06
2006');
1lignecre.SQL>SELECT*FROMPilote;
BREVET
NOM
NBHVOL
COMP
NBQUALIF
PL1J.MMisztela450AF3PL2ThierryGuibert3400AFPL3MichelTuffery900SING1
SQL>INSERTINTOQualificationsVALUES('PL1','A380','20062006');
ERREURlaligne1:ORA06512: "SOUTOU.TRIGINSQUALIF", ligne9ORA04088:erreurlorsd'excutiondudclencheur'SOUTOU.TRIGINSQUALIF'
-
8/9/2019 oracl projet
15/18
15
Exempledecrationduntrigger:
CREATETRIGGERdept_del_cascade
AFTERDELETEONdeptFOREACHROWBEGINDELETEFROMempWHEREemp.deptno=:old.deptno;END
CREATETRIGGER[schma.]trigger{BEFORE|AFTER}{DELETE|INSERT|UPDATE[OFcolonne[,colonne]...]}[OR{DELETE|INSERT|UPDATE[OFcolonne[,colonne]...]}...ON[schema.]table[[REFERENCING{OLD[AS]ancienNEW[AS]nouveau]|NEW[AS]nouveauOLD[AS]ancien]}]FOREACHROW][ENABLE|DISABLE][WHEN(condition)]bloc_PL/SQL
4.2.7 Utilisation des pseudos colonnesLes triggers de lignes (FOR EACH ROW) permettent de manipuler les attributs(colonnes)dutupleactuellementtraits,aveclespseudoscolonnes:Newet:Old.Les triggersd'insertionontaccsunevariablecontenant lanouvellevaleurd'unecolonne(:New.colonne).Les triggers de suppression ont accs une variable contenant l'ancienne valeurd'unecolonne(:Old.colonne).Lestriggersdemodificationontaccsauxdeuxvariablesprcdentes.
Vous pouvez spcifier un nom diffrent pour :New et :Old avec la clauseREFERENCING (peu utilis dans la pratique). Vous pouvez ainsi, dans le corps dutrigger,utiliserlesnouveauxnomslaplacedes:Newet:Old.
[[REFERENCING {OLD [AS] ancienNEW [AS] nouveau]| NEW [AS] nouveauOLD [AS] ancien]}]
-
8/9/2019 oracl projet
16/18
16
4.2.8 Regroupement dvnements dclencheursOn peut crer un trigger traitant le cas de plusieurs ordres LMD. La condition dedclenchementseradonccompose:
....INSERT OR UPDATE OR DELETE ON matable.
Ondisposealorspourlapartieactiondefonctionsboolennes,nommesprdicats,permettantdecaractriserl'ordreexactdclenchantletrigger:
IFInsertingTHEN...ENDIF;IFUpdatingTHEN...ENDIF;IFDeletingTHEN...ENDIF;
4.2.9 Modification d'un triggerLamodificationd'untriggerconsistel'activerouledsactiver.Larecompilationd'untriggerpeutgalementsefaireparlacommandedemodificationsuivante:
ALTER TRIGGER [schema.]trigger{ENABLE | DISABLE | COMPILE} ;)
Dssacration,untriggerestprtfonctionner.Pourl'invalidertemporairement,onlancel'ordreSQLsuivant:
ALTER TRIGGER trigger_name DISABLE
Pourinvalidertouslestriggersd'unetable,ondisposedelasyntaxesuivante:
ALTER TABLE table_name DISABLE ALL TRIGGERS;
Pour remettre en place les triggers,on utilise l'option ENABLE en lieuetplacedel'optionDISABLE.Exemple:Recompileretactiverletriggertr_bi_eleve.
ALTER TRIGGER tr_bi_eleve COMPILE;ALTER TRIGGER tr_bi_eleve ENABLE;
4.2.10 Suppression d'un triggerPoursupprimeruntrigger,l'utilisateurdoitformulerlacommandesuivante:
DROP TRIGGER [schema.]trigger;
4.2.11 Vues du dictionnaire
-
8/9/2019 oracl projet
17/18
17
Les vues du dictionnaire rfrenant les triggers sont: USER_TRIGGERS,ALL_TRIGGERSetDBA_TRIGGERS
4.2.12 Lecture inconsistante, table en mutation et transaction autonomeDansuntriggerFOREACHROW,onnepeutpaslireoumettrejourlatablepartirde laquelle le triggeratdclench.Cette limitationpermetdviter les lecturesinconsistantes.Celaprovoquelerreursuivante:
ORA-04091 EMP IS MUTATING, TRIGGER MAY NOT READ OR MODIFY IT
Si vous dsirez toutefois contourner cette limitation, vous pouvez utiliser unetransactionautonome.La directive de compilation PRAGMA_AUTONOMOUS_TRANSACTION spcifie audbut de laction de votre trigger, vous permet dexcuter votre action dans unetransactionautonome.Vouspouvezdanscecasutiliser lescommandesCOMMITetROLLBACK.
4.2.13 Trigger INSTEAD OFL'option INSTEADOF (littralement :au lieude)peuttre spcifie sur les triggersplacsurunevue.Cetteoptionoffreunepossibilittransparenteetefficacepourpermettre lamisejourdedonnestraversdesvuesnonmodifiables(nonUPDATABLE.)L'actiondutriggerestbieneffectueenlieuetplacedel'instructionquiledclenche.Les triggers INSTEAD OF ne sont videment pas utilisable sans l'option FOR EACHROWetnedisposentpasdesoptionsBEFOREetAFTER.LasyntaxedestriggersINSTEADOFestlasuivante:
CREATETRIGGERnom_triggerINSTEADOF{INSERTUPDATEDELETE} ONnom_de_vuesuite_d_instructions;
-
8/9/2019 oracl projet
18/18
18
5 ConclusionCe miniprojet nous a permis de perfectionner nos connaissances en
programmation avance en PL/SQL et surtout la partir des DclencheursautomatiquesenutilisantBasededonnesOracle
Suite notre avanc, dans ce miniprojet nous avons fait face plusieursdifficultauniveaude langagePL/SQLcequinousapouss fairedesrecherchespourconcrtisercertaines idesetaussiademand laidedenotrecherprofesseurquinous la accordavecbeaucoupdebonne volontet aqui nous sommes trsreconnaissant.
Par la suite nous aimerions cerner toutes les subtilits du ORACLE, pouramliorer et volu nos connaissances, dans le but de devenir des ingnieurscomptant.