Bonjour ,
Est ce qu'un trigger invalid peux créer un probleme dans une base de donnée ?
Version imprimable
Bonjour ,
Est ce qu'un trigger invalid peux créer un probleme dans une base de donnée ?
Que signifie "Créer un problème" ?
Bonjur ,
je me suis trompé dans la création de la discussion en fait , je parle de la création d'un trigger invalid qui créerai un probleme sur une base de donnée.
Qui par exemple empecherai la création de lignes dans une voir plusieurs tables .
Lorsqu'un déclencheur est invalide, c'est comme s'il n'existait pas, et il n'a donc aucun effet.
Donc un declencheur invalide mais actif ne peux pas avoir d'effet .
Un déclencheur possède d'une part un statut d'activation (ENABLED ou DISABLED) visible dans la colonne STATUS de DBA_TRIGGERS, et d'autre part un statut de validité (VALID ou INVALID) visible dans la colonne STATUS de DBA_OBJECTS.
Un déclencheur peut tout à fait être INVALID (code source comportant des erreurs qui empêchent sa compilation) et ENABLED, mais en effet, il ne s'exécutera pas, et ne produira donc aucun effet.
Merci Pomalaix pour ta reponse .
Il y a certains de mes collegues qui me disent que parfois un trigger meme invalid, peux avoir des effets.
Chose que j'ai peine a croire tout de meme...
Un trigger INVALID peut en effet affecter les données... en n'effectuant pas les opérations qu'il serait censé faire s'il était valide ;)
Merci beaucoup pour vos reponses , je comprends mieux le probleme que j'ai rencontré.
Je pense que vous devez détailler/exemplifier vos propos
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 SQL> create table t(a int); Table created SQL> create trigger bit 2 before insert on t 3 for each row 4 begin 5 a := 1; 6 end; 7 / Warning: Trigger created with compilation errors SQL> insert into t values (2); insert into t values (2) ORA-04098: Déclencheur 'MNI.BIT' non valide. Echec de la revalidation SQL> select status 2 from user_triggers 3 where trigger_name = 'BIT' 4 / STATUS -------- ENABLED SQL> select status 2 from user_objects 3 where object_name = 'BIT' 4 / STATUS ------- INVALID
Salut Marius, c'est en effet une bonne idée, et qui s'appliquerait avec bonheur à 80% de tes interventions :rire:
Dans le cas présent, il manque à ton test le petit final qui démontre que j'ai dit une énormité.
De fait, si le déclencheur est INVALID et ENABLED, il y a tentative d'exécution, mais sans succès, ce qui provoque l'annulation de l'instruction déclenchante.
Le déclencheur invalide a donc bel et bien un effet (voir ligne 23 dans l'exemple ci-dessous).
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 SQL> create table t(a int); Table créée. SQL> create trigger bit 2 before insert on t 3 for each row 4 begin 5 a := 1; 6 end; 7 / Avertissement : Déclencheur créé avec erreurs de compilation. SQL> insert into t values (2); insert into t values (2) * ERREUR à la ligne 1 : ORA-04098: Déclencheur 'BIT' non valide. Echec de la revalidation SQL> select * from t; aucune ligne sélectionnée SQL> select status 2 from user_triggers 3 where trigger_name = 'BIT'; STATUS -------- ENABLED SQL> select status 2 from user_objects 3 where object_name = 'BIT'; STATUS ------- INVALID
en conclusion :
Un déclencheur invalid peux créer un problème sur une application qui par exemple lors de la création d'un utilisateur l'enregistre dans une table si le déclencheur a ce moment là est sollicité l'application va générer un message d'erreur qui peux être bloquant.
Merci pour vos réponses