يقدم موقعنا تمارين مصححة في لغات البرمجة مثل C / C ++ و PHP
. اكتشف أيضًا مدونتنا التي تحتوي على آخر أخبار التكنولوجيا من هنا

abdelouafi

Administrator
أحدث المقالات
إذا كنت ترغب في مشاهدة الصور ، يرجى النقر عليها
Blog
SUIVEZ NOTRE CHAINE YOUTUBE: قم بالتسجيل في قناتنا عبر هذا الرابط https://www.youtube.com/channel/UCCITRMWPcElh-96wCS3EyUg
devoir 1 math tronc commun

مجموعة من دروس و فروض جميع المستويات

دروس الإعدادي - دروس الثانوي الثأهيلي - دروس التعليم الابتدائي - فروض مختلف المستويات الدراسية

فضلا و ليس أمرا شارك هذه الصفحة مع أصدقائك:
Les déclencheurs : Triggers

Déclencheur ligne « row trigger »
 Déclencheur s'exécute pour chaque ligne
 Accès aux anciennes et aux nouvelles valeurs
- :OLD.colonne ancienne valeur
- :NEW.colonne nouvelle valeur

- OLD permet de connaître la ligne en cours de suppression dans un trigger DELETE ou la ligne avant modification dans un trigger UPDATE.
- NEW permet de connaître la nouvelle ligne insérée dans un trigger INSERT ou la ligne après modification dans un trigger UPDATE
Exemple d’un déclencheur ligne : Mise à jour automatique du nombre du vol
1. Ajouter le champ Nbrevol à la table Pilote initialisé à 0 puis afficher ses lignes .
2. Créer le déclencheur INSERT_VOL.
3. Insérer un vol puis afficher les lignes la table pilote.

alter table pilote ADD (nbrevol integer default 0);
CREATE OR REPLACE TRIGGER INSERT_VOL AFTER INSERT ON Vol FOR EACH ROW BEGIN UPDATE Pilote SET Nbrevol = Nbrevol + 1 WHERE npilote = :NEW.npilote; END INSERT_VOL; /

insert into vol values (92,2,2,'Rak','Fes','0815','1020',SYSDATE);

Exemple d’un déclencheur ligne : Un pilote ne doit pas effectuer 2 vols par jour.
CREATE OR REPLACE TRIGGER Nombre_Vol BEFORE INSERT ON Vol FOR EACH ROW DECLARE Nbre Number; BEGIN select Count(*) into Nbre from Vol WHERE npilote = :NEW.npilote AND DateV='03/03/89'; If Nbre>=1 then RAISE_APPLICATION_ERROR(-20101, 'Le pilote numéro ' || :NEW.npilote || ' a déjà un vol' ); End if; END; /

insert into vol values (95,1,2,'Rak','Fes','0815','1020','03/03/89'); Commit;


ERREUR à la ligne 1 : ORA-20101: Le pilote numéro 1 a déjà un vol ORA-04088: erreur lors d'exécution du déclencheur 'NOMBRE_VOL'

Regroupement d’événements
 On peut programmer des conditions
 Cas d’une insertion IF INSERTING THEN …
 Cas d’une mise à jour IF UPDATING(‘colonne ’) THEN …
 Cas d’une suppression IF DELETING THEN …
 Regroupement possible dans un seul déclencheur


CREATE OR REPLACE TRIGGER REG_EVENEMENT AFTER INSERT OR DELETE ON Vol REFERENCING OLD AS LigneAvant NEW AS LigneApres FOR EACH ROW BEGIN IF INSERTING THEN UPDATE Pilote SET Nbrevol = Nbrevol + 1 WHERE npilote = :LigneApres.npilote; END IF; IF DELETING THEN UPDATE Pilote SET Nbrevol = Nbrevol - 1 WHERE npilote = :LigneAvant.npilote; END IF; END REG_EVENEMENT; /

insert into vol values (92,2,2,'Rak','Fes','0815','1020',SYSDATE); delete from vol Where nvol=92 and npilote=2;

Principe :
 Raisonnement global sur la table
 Pas sur un enregistrement particulier

Exemple : Ne permet pas la modification du numéro de pilote et de l’avion dans la table Vol.
CREATE OR REPLACE TRIGGER Exemple_Statement BEFORE UPDATE OF Npilote, Navion ON Vol BEGIN RAISE_APPLICATION_ERROR(-20102, 'Cette modification est interdite dans la table vol'); END Exemple_Statement; /

SQL> update vol set npilote=9 where nvol=100;

Suppression
DROP TRIGGER NomDéclencheur ;

Désactivation
ALTER TRIGGER NomDéclencheur DISABLE ;

Réactivation
ALTER TRIGGER NomDéclencheur ENABLE ;

Désactivation/réactivation de tous les déclencheurs d ’une table

ALTER TABLE NomTable { ENABLE | DISABLE } ALL TRIGGERS ;

Principe  Déclencheur dont le corps s'exécute « à la place de » l’événement déclenchant  Uniquement dans le cadre de déclencheur ligne  Le déclencheur INSTEAD OF permet l’insertion, la modification et la suppression de lignes à travers une vue basée sur plusieurs tables qui pourrait être autrement non modifiable car la vue est le résultat d’une jointure.

Syntaxe
CREATE [OR REPLACE] TRIGGER nomtrigger INSTEAD OF {DELETE|INSERT|UPDATE [OF colonne1 ,…]} ON NomVue FOR EACH ROW [DECLARE] -- déclaration de variables BEGIN -- instruction SQL et PL/SQL END [nomtrigger]; /
 

Attachments

  • Cours_PL_SQL_Snineh.pdf
    48.8 KB · Views: 998
Last edited:
Top