Dans un premier temps, on va essayer de créer un déclencheur (trigger) sur la table EMP du schéma SCOTT.
Voici le code:
create or replace trigger TR_EMP_COUNT
AFTER DELETE ON EMP
FOR EACH ROW
DECLARE
num number;
BEGIN
SELECT COUNT(*) INTO NUM
FROM EMP;
DBMS_OUTPUT.PUT_LINE(' Nbre d''employés' ||num);
END;
Ensuite, on essaye de faire un DELETE sur cette table:
DELETE FROM EMP
WHERE DEPTNO=30;
À ce moment là, le trigger se déclenche et Oracle génére une erreur de type table en mutation (ORA-04091).
Pour résoudre ce problème, il y a deux possibilités:
Maintenant, l'opération de DELETE fonctionne parfaitement:
SQL> delete from emp
2 where deptno=30;
6 rows deleted
Voici le code:
create or replace trigger TR_EMP_COUNT
AFTER DELETE ON EMP
FOR EACH ROW
DECLARE
num number;
BEGIN
SELECT COUNT(*) INTO NUM
FROM EMP;
DBMS_OUTPUT.PUT_LINE(' Nbre d''employés' ||num);
END;
Ensuite, on essaye de faire un DELETE sur cette table:
DELETE FROM EMP
WHERE DEPTNO=30;
À ce moment là, le trigger se déclenche et Oracle génére une erreur de type table en mutation (ORA-04091).
Pour résoudre ce problème, il y a deux possibilités:
- Enlever FOR EACH ROW ou
- Utiliser PRAGMA AUTONOMOUS_TRANSACTION.
Maintenant, l'opération de DELETE fonctionne parfaitement:
SQL> delete from emp
2 where deptno=30;
6 rows deleted
Aucun commentaire:
Enregistrer un commentaire