Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/10/2007, 15h36   #1
Futur Membre du Club
 
Inscription : octobre 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 62
Points : 15
Points : 15
Par défaut Désactiver un trigger seulement s'il existe

Bonjour,
Je souhaiterais désactiver un trigger sur certaines bases. Cependant, sur certaines d'entre elle, ce trigger n'existe. Je veux donc n'exécuter l'alter trigger que s'il existe.
J'ai tester le script suivant mais il ne passe pas :
ORA-06550: Ligne 6, colonne 4 :
PLS-00103: Symbole "ALTER" rencontré à la place d'un des symboles suivants :...

Code :
1
2
3
4
5
6
7
8
9
 
declare A VARCHAR2(20);
begin
	 SELECT rownum object_name INTO A FROM dba_objects WHERE object_name='TRG_TTT'AND rownum = 1;
	 IF A='TRG_TTT' then
	 begin
	 	ALTER TRIGGER TRG_TTT DISABLE;
         end IF;
end;
Quelqu'un a-t-il une idée pour résoudre ce problème ?
et produire l'équivalent du script SQL Server suivant :
Code :
1
2
3
 
IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[TRG_TTT]') AND OBJECTPROPERTY(id, N'IsTrigger') = 1)
ALTER TABLE TTT DISABLE TRIGGER TRG_TTT;
dim07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2007, 15h49   #2
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
Code :
1
2
3
4
5
6
7
8
9
10
 
begin
  SELECT * FROM all_triggers
  WHERE trigger_name = 'TRG_TTT DISABLE'
  ;
 execute immediate 'ALTER TRIGGER TRG_TTT DISABLE' ;
Exception
  when NO_DATA_FOUND Then
    NULL ;
end;
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2007, 19h18   #3
Membre confirmé
 
Avatar de DAB.cz
 
Inscription : octobre 2006
Messages : 221
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 221
Points : 214
Points : 214
Citation:
Envoyé par SheikYerbouti Voir le message
Code :
1
2
3
4
5
6
7
8
9
10
 
begin
  SELECT * FROM all_triggers
  WHERE trigger_name = 'TRG_TTT DISABLE'
  ;
 execute immediate 'ALTER TRIGGER TRG_TTT DISABLE' ;
Exception
  when NO_DATA_FOUND Then
    NULL ;
end;
Soyons soigneux:

Code :
1
2
3
4
5
6
7
8
9
10
declare
  x number;
begin
  SELECT 1 INTO x FROM user_triggers
  WHERE trigger_name = 'TRG_TTT';  -- DISABLE
 execute immediate 'ALTER TRIGGER TRG_TTT DISABLE' ;
Exception
  when NO_DATA_FOUND Then
    NULL ;
end;
DAB
DAB.cz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2007, 19h43   #4
Membre expérimenté
 
Inscription : juillet 2007
Messages : 495
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2007
Messages : 495
Points : 585
Points : 585
Mon cher DAB.cz, je crois que tu ne sais pas encore bien qui est Sheik Yerbouti sur ce forum... Consulte donc un peu ses nombreux tutoriels, et tu verra que le gars taquine plutôt bien question Oracle, et a rendu de grands services à plus d'un parmi nous.

Certes, ce que tu as corrigé est vrai, mais tout le monde aura compris que ce n'était que des fautes de frappe ou du détail (SELECT 1 INTO X au lieu de SELECT * dans une vue du dictionnaire, je crois que tu coupes un peu les cheuveux en 4...).

Donc, à mon humble avis, reprend qui tu veux sur ce forum pour ce genre de futilités, mais pas lui ! Je dis ça pour lui, parce que sans le connaître, je pense que sa modestie est à la hauteur de ta fierté, et donc il ne te répondra pas...

Sinon, est-ce que Adriana est représentative de la population féminine tchèque ?
__________________
Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !
dgi77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2007, 07h02   #5
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
Il ou elle a raison de corriger, dans la mesure ou mon code aurait généré une vilaine erreur
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2007, 08h02   #6
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
Quite à pinailler, je préfère me passer du select, tout simplement :
Code :
1
2
3
4
5
6
7
8
 
BEGIN
   EXECUTE IMMEDIATE 'alter trigger mon.trigger_a_moi disable';
EXCEPTION
   WHEN OTHERS THEN
      NULL;
END;
/
à quoi bon interroger la vue du dictionnaire de données puisque de toute façon, oracle va le faire pour nous ?
ça change quoi ?
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 
SQL> SELECT 1 FROM dba_triggers WHERE Trigger_Name ='TOTO';
 
aucune ligne sélectionnée
 
 
Plan d'exécution
----------------------------------------------------------
 
----------------------------------------------------------------------------------------
| Id  | Operation                          | Name         | Rows  | Bytes | Cost (%CPU)|
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                   |              |    15 |   255 |    79   (2)|
|   1 |  VIEW                              | DBA_TRIGGERS |    15 |   255 |    79   (2)|
|   2 |   UNION-ALL                        |              |       |       |            |
|   3 |    HASH JOIN                       |              |     9 |   504 |    51   (2)|
|   4 |     NESTED LOOPS                   |              |     9 |   468 |    46   (3)|
|   5 |      HASH JOIN                     |              |     9 |   387 |    37   (3)|
|   6 |       NESTED LOOPS                 |              |     9 |   351 |    31   (0)|
|   7 |        TABLE ACCESS FULL           | TRIGGER$     |    25 |   350 |     6   (0)|
|   8 |        TABLE ACCESS BY INDEX ROWID | OBJ$         |     1 |    25 |     1   (0)|
|   9 |         INDEX UNIQUE SCAN          | I_OBJ1       |     1 |       |     0   (0)|
|  10 |       TABLE ACCESS FULL            | USER$        |   292 |  1168 |     5   (0)|
|  11 |      TABLE ACCESS BY INDEX ROWID   | OBJ$         |     1 |     9 |     1   (0)|
|  12 |       INDEX UNIQUE SCAN            | I_OBJ1       |     1 |       |     0   (0)|
|  13 |     TABLE ACCESS FULL              | USER$        |   292 |  1168 |     5   (0)|
|  14 |    NESTED LOOPS                    |              |     4 |   152 |    14   (0)|
|  15 |     NESTED LOOPS                   |              |     4 |   136 |    10   (0)|
|  16 |      TABLE ACCESS FULL             | TRIGGER$     |     4 |    36 |     6   (0)|
|  17 |      TABLE ACCESS BY INDEX ROWID   | OBJ$         |     1 |    25 |     1   (0)|
|  18 |       INDEX UNIQUE SCAN            | I_OBJ1       |     1 |       |     0   (0)|
|  19 |     TABLE ACCESS CLUSTER           | USER$        |     1 |     4 |     1   (0)|
|  20 |      INDEX UNIQUE SCAN             | I_USER#      |     1 |       |     0   (0)|
|  21 |    NESTED LOOPS                    |              |     1 |    47 |     9   (0)|
|  22 |     NESTED LOOPS                   |              |     1 |    43 |     8   (0)|
|  23 |      NESTED LOOPS                  |              |     1 |    18 |     7   (0)|
|  24 |       TABLE ACCESS FULL            | TRIGGER$     |     1 |    14 |     6   (0)|
|  25 |       TABLE ACCESS CLUSTER         | USER$        |     1 |     4 |     1   (0)|
|  26 |        INDEX UNIQUE SCAN           | I_USER#      |     1 |       |     0   (0)|
|  27 |      TABLE ACCESS BY INDEX ROWID   | OBJ$         |     1 |    25 |     1   (0)|
|  28 |       INDEX UNIQUE SCAN            | I_OBJ1       |     1 |       |     0   (0)|
|  29 |     TABLE ACCESS CLUSTER           | USER$        |     1 |     4 |     1   (0)|
|  30 |      INDEX UNIQUE SCAN             | I_USER#      |     1 |       |     0   (0)|
|  31 |    NESTED LOOPS                    |              |     1 |    99 |     5   (0)|
|  32 |     NESTED LOOPS                   |              |     1 |    95 |     4   (0)|
|  33 |      NESTED LOOPS                  |              |     1 |    91 |     3   (0)|
|  34 |       NESTED LOOPS                 |              |     1 |    82 |     2   (0)|
|  35 |        NESTED LOOPS                |              |     1 |    57 |     1   (0)|
|  36 |         INDEX FULL SCAN            | I_VIEWTRCOL1 |     1 |    39 |     0   (0)|
|  37 |         TABLE ACCESS BY INDEX ROWID| TRIGGER$     |     1 |    18 |     1   (0)|
|  38 |          INDEX RANGE SCAN          | I_TRIGGER1   |     1 |       |     0   (0)|
|  39 |        TABLE ACCESS BY INDEX ROWID | OBJ$         |     1 |    25 |     1   (0)|
|  40 |         INDEX UNIQUE SCAN          | I_OBJ1       |     1 |       |     0   (0)|
|  41 |       TABLE ACCESS BY INDEX ROWID  | OBJ$         |     1 |     9 |     1   (0)|
|  42 |        INDEX UNIQUE SCAN           | I_OBJ1       |     1 |       |     0   (0)|
|  43 |      TABLE ACCESS CLUSTER          | USER$        |     1 |     4 |     1   (0)|
|  44 |       INDEX UNIQUE SCAN            | I_USER#      |     1 |       |     0   (0)|
|  45 |     TABLE ACCESS CLUSTER           | USER$        |     1 |     4 |     1   (0)|
|  46 |      INDEX UNIQUE SCAN             | I_USER#      |     1 |       |     0   (0)|
----------------------------------------------------------------------------------------
 
Note
-----
   - 'PLAN_TABLE' is old version
 
 
Statistiques
----------------------------------------------------------
        288  recursive calls
          0  db block gets
        390  consistent gets
         25  physical reads
          0  redo size
        160  bytes sent via SQL*Net to client
        333  bytes received via SQL*Net from client
          1  SQL*Net roundtrips to/from client
         10  sorts (memory)
          0  sorts (disk)
          0  rows processed
c'est quand même pas si neutre que ça comme select ...
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2007, 08h42   #7
Membre confirmé
 
Avatar de LBO72
 
Inscription : mai 2007
Messages : 385
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 385
Points : 282
Points : 282
Je suis parfaitement de l'avis de Dab77
Il faut respecter les GRANDS FONDATEURS DE CE SITE qui nous mettent à disposition plusieurs outils et nous font toujours apprendre des choses.

En tout cas, pour moi, je m'incline devant leur savoir
LBO72.
LBO72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2007, 09h05   #8
Membre confirmé
 
Avatar de DAB.cz
 
Inscription : octobre 2006
Messages : 221
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 221
Points : 214
Points : 214
Citation:
Envoyé par SheikYerbouti Voir le message
Il ou elle
Il.

Citation:
tu ne sais pas encore bien qui est Sheik Yerbouti sur ce forum
SheikYerbouti, Rédacteur/Modérateur, six plumes, six étoiles, Oracle ACE. Merci de faire la connaissance.

Mais LeoAnderson a résolu le problème. Petite amélioration (en bonne part):

Code :
1
2
3
4
5
6
7
8
9
10
DECLARE
  eee exception;
  pragma exception_init (eee, -04080);
BEGIN
   EXECUTE IMMEDIATE 'alter trigger mon.trigger_a_moi disable';
EXCEPTION
   WHEN eee THEN
      NULL;
END;
/
Est-ce que je fais quelque chose méchant? Je ne réalise pas. Mais dans tous les cas, pardonnez mon français.

Avec respect, DAB
DAB.cz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2007, 10h03   #9
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
Bien vu Léo
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2007, 11h23   #10
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 453
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 453
Points : 4 217
Points : 4 217
Citation:
Envoyé par LBO72 Voir le message
Je suis parfaitement de l'avis de Dab77
Il faut respecter les GRANDS FONDATEURS DE CE SITE qui nous mettent à disposition plusieurs outils et nous font toujours apprendre des choses.
Pas entièrement d'accord, un code faux est un code faux.. et ne pas le corriger posera des pb aux futurs lecteurs de ce post qui ne pourraient pas comprendre pourquoi ça ne marche pas.

Par contre pour le respect.. ça oui, entièrement d'accord, vu le temps passé sur le forum à répondre à nos questions.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h28.


 
 
 
 
Partenaires

Hébergement Web