oracl projet

Upload: adnaneadnane

Post on 30-May-2018

231 views

Category:

Documents


1 download

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.