Dans Oracle, un déclencheur exécute automatiquement une instruction définie lorsque la condition spécifiée est remplie. Il est écrit comme "créer [ou remplacer] le nom du déclencheur tigger, l'heure du déclenchement, l'événement déclencheur sur le nom de la table [pour chaque ligne] début pl/sql Fin de l'instruction ".
L'environnement d'exploitation de ce tutoriel : système Windows 10, version Oracle 11g, ordinateur Dell G3.
1. Introduction aux déclencheurs
La définition d'un déclencheur signifie que lorsqu'une certaine condition est établie, l'instruction définie dans le déclencheur sera automatiquement exécutée.
Le déclencheur n'a donc pas besoin d'être appelé manuellement et ne peut pas être appelé.
Ensuite, les conditions de déclenchement du déclencheur sont effectivement fixées lorsque vous le définissez.
Il doit être expliqué ici que les déclencheurs peuvent être divisés en déclencheurs au niveau de l'instruction et en déclencheurs au niveau de la ligne.
Vous pouvez vous référer aux informations en ligne pour une introduction détaillée. En termes simples, les déclencheurs au niveau des instructions peuvent être déclenchés avant ou après l'exécution de certaines instructions. Les déclencheurs au niveau des lignes sont déclenchés une fois lorsque les données des lignes dans la table de déclencheurs définie changent.
Exemples spécifiques :
1. Un déclencheur au niveau de l'instruction défini dans une table. Lorsque la table est supprimée, le programme exécutera automatiquement le processus d'opération défini dans le déclencheur. Cela signifie que l'opération de suppression de la table est la condition d'exécution du déclencheur.
2. Si un déclencheur au niveau de la ligne est défini dans une table, lorsqu'une ligne de données dans la table change, comme une ligne d'enregistrements en cours de suppression, le déclencheur sera automatiquement exécuté.
2. Syntaxe du déclencheur
Syntaxe du déclencheur :
create [or replace] tigger 触发器名 触发时间 触发事件 on 表名 [for each row] begin pl/sql语句 end
Parmi eux :
Nom du déclencheur : le nom de l'objet déclencheur. Puisque le déclencheur est automatiquement exécuté par la base de données, le nom n’est qu’un nom et n’a aucun objectif réel.
Trigger time : Indique quand le trigger est exécuté. La valeur est disponible :
before : indique que le trigger est exécuté avant l'action de la base de données
after : indique que le trigger est exécuté après la ; action de base de données.
Événement déclencheur : indiquez quelles actions de la base de données déclencheront ce déclencheur :
insertion : l'insertion de la base de données déclenchera ce déclencheur
mise à jour : la modification de la base de données déclenchera ce déclencheur ; déclenche ce déclencheur.
Nom de la table : la table où se trouve le déclencheur de la base de données.
pour chaque ligne : Exécutez le déclencheur une fois pour chaque ligne du tableau. Sans cette option, elle n'est exécutée qu'une seule fois pour l'ensemble de la table.
Les déclencheurs peuvent réaliser les fonctions suivantes :
1. Autoriser/restreindre les modifications de la table
2. Générer automatiquement des colonnes dérivées, telles que des champs à incrémentation automatique
3. 4, Fournir un audit et une journalisation
5. Empêcher le traitement des transactions invalides
6. Activer une logique métier complexe
Exemple
1), le déclencheur suivant est déclenché avant la mise à jour de la table tb_emp, dans le but de ne pas autoriser les modifications le week-end. Tableau :
create or replace trigger auth_secure before insert or update or DELETE on tb_emp begin IF(to_char(sysdate,'DY')='星期日') THEN RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表tb_emp'); END IF; END; /
2), utilisez des déclencheurs pour implémenter l'auto-incrémentation du numéro de série
Créez une table de test :
create table tab_user( id number(11) primary key, username varchar(50), password varchar(50) );
Créez une séquence :
Copiez le code Le code est le suivant :
create sequence my_seq increment by 1 start with 1 nomaxvalue nocycle cache 20;
Créez un déclencheur :
CREATE OR REPLACE TRIGGER MY_TGR BEFORE INSERT ON TAB_USER FOR EACH ROW--对表的每一行触发器执行一次 DECLARE NEXT_ID NUMBER; BEGIN SELECT MY_SEQ.NEXTVAL INTO NEXT_ID FROM DUAL; :NEW.ID := NEXT_ID; --:NEW表示新插入的那条记录 END;
Insérer dans la table Données :
insert into tab_user(username,password) values('admin','admin'); insert into tab_user(username,password) values('fgz','fgz'); insert into tab_user(username,password) values('test','test'); COMMIT;
Résultats de la table de requête : SELECT * FROM TAB_USER;
Tutoriel recommandé : "
Tutoriel vidéo Oracle"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!