Maison >base de données >Oracle >Comment écrire un déclencheur Oracle

Comment écrire un déclencheur Oracle

WBOY
WBOYoriginal
2022-01-25 12:07:2015441parcourir

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 ".

Comment écrire un déclencheur Oracle

L'environnement d'exploitation de ce tutoriel : système Windows 10, version Oracle 11g, ordinateur Dell G3.

Comment écrire un déclencheur Oracle

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 :

  • Fonction :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn