IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Désactiver un trigger seulement s'il existe


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 64
    Points : 46
    Points
    46
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre actif Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut
    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 !

  5. #5
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    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

  6. #6
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Quite à pinailler, je préfère me passer du select, tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ...

  7. #7
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    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.

  8. #8
    Membre actif Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    Il ou elle
    Il.

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  9. #9
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    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

  10. #10
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    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
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

Discussions similaires

  1. désactiver un trigger
    Par JustMe dans le forum SQL
    Réponses: 4
    Dernier message: 20/06/2016, 08h59
  2. Autorisation de désactivation de trigger
    Par dev-man dans le forum Développement
    Réponses: 4
    Dernier message: 22/11/2006, 11h44
  3. Désactiver le trigger en cours
    Par gk14fire dans le forum Oracle
    Réponses: 3
    Dernier message: 05/06/2006, 23h43
  4. [Syntaxe Oracle/Sybase] désactiver un trigger
    Par MashiMaro dans le forum Sybase
    Réponses: 3
    Dernier message: 30/10/2003, 11h17
  5. Désactiver un trigger sous MS Sql Server
    Par WOLO Laurent dans le forum Développement
    Réponses: 6
    Dernier message: 03/07/2003, 12h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo