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 :

[9i] DBMS_METADATA et commentaires


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 47
    Par défaut [9i] DBMS_METADATA et commentaires
    Bonjour,

    J'ai créé un script en PL/SQL pour extraire d'une base les instructions nécessaires à la création des différentes tables d'un utilisateur à l'aide du package DBMS_METADATA. Jusque là pas de soucis.

    Mais j'ai voulu également récupérer les commentaires des différentes colonnes, et je n'ai pas trouvé l'instruction nécessaire en utilisant le package DBMS_METADATA.

    J'ai fais autrement, en parcourant la table USER_COL_COMMENTS ou tout simplement en utilisant les fonctionnalités d'export de TOAD, mais par curiosité j'aimerais bien savoir si l'un d'entre vous sait comment récupérer les commentaires de colonne à partir de ce package.

    Je mets ci-dessous mon code simplifié pour vous aider à mieux visualiser ma demande. Comme précisé dans le titre, je travaille sous Oracle9i :

    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
    DECLARE
        L_HFIC  		UTL_FILE.FILE_TYPE;
        TEXTE			CLOB;
        TABLE_NAME		VARCHAR2(30);
        L_BUFFER        PLS_INTEGER := 32767;
     
        -- Curseur de parcours des tables du shéma
        CURSOR C_SOURCE IS
            SELECT  TABLE_NAME
            FROM    USER_TABLES
            ORDER BY TABLE_NAME;
    BEGIN
     
        OPEN C_SOURCE;
        LOOP
            FETCH C_SOURCE INTO TABLE_NAME;
            IF C_SOURCE%NOTFOUND THEN
                UTL_FILE.FCLOSE_ALL;
                EXIT;
            END IF;
     
            -- Récupération de la description de la table
            SELECT  DBMS_METADATA.GET_DDL('TABLE', TABLE_NAME)
            INTO TEXTE FROM DUAL;
     
            L_HFIC := UTL_FILE.FOPEN('TABLES', TABLE_NAME || '.SQL', 'W', L_BUFFER);
            UTL_FILE.PUT_LINE(L_HFIC, TEXTE);
            UTL_FILE.FFLUSH(L_HFIC);
            UTL_FILE.FCLOSE(L_HFIC);
        END LOOP;
        CLOSE C_SOURCE;
    END P_TABLES;
     
    /
     
    SHOW ERRORS;
     
    /
    Merci d'avance.

  2. #2
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    La procédure GET_DEPENDENT_DDL devrait vous convenir :

    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
    SCOTT@COURS>create table scott.test(a int);
     
    Table créée.
     
    SCOTT@COURS>
    SCOTT@COURS>comment on table scott.test is 'baratin pour test';
     
    Commentaire créé.
     
    SCOTT@COURS>set long 5000
    SCOTT@COURS>select dbms_metadata.get_dependent_ddl( 'COMMENT', 'TEST', 'SCOTT') from dual;
     
    DBMS_METADATA.GET_DEPENDENT_DDL('COMMENT','TEST','SCOTT')
    --------------------------------------------------------------------------------
       COMMENT ON TABLE "SCOTT"."TEST"  IS 'baratin pour test'

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 47
    Par défaut
    Merci de ta réponse. Mais j'avais déjà vu une solution similaire lors de mes recherches. Cependant ici je recherche une solution pour récupérer les commentaires sur colonne et non sur table.

  4. #4
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Effectivement j'avais lu votre question un peu vite, mais il se trouve que la réponse est la même : GET_DEPENDENT_DDL, appliquée sur le type COMMENT, permet de récupérer à la fois les commentaires de tables et de colonnes.
    Par contre je ne connais pas d'astuce simple pour récupérer les uns sans les autres, étant donné que le résultat est un CLOB unique contenant les différents commentaires.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SCOTT@COURS>comment on column scott.test.a is 'baratin de colonne';
     
    Commentaire créé.
     
    SCOTT@COURS>
    SCOTT@COURS>set long 5000
    SCOTT@COURS>SELECT dbms_metadata.get_dependent_ddl( 'COMMENT', 'TEST', 'SCOTT') FROM dual;
     
    DBMS_METADATA.GET_DEPENDENT_DDL('COMMENT','TEST','SCOTT')
    --------------------------------------------------------------------------------
     
       COMMENT ON COLUMN "SCOTT"."TEST"."A" IS 'baratin de colonne'
     
       COMMENT ON TABLE "SCOTT"."TEST"  IS 'baratin pour test'

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 47
    Par défaut
    Merci d'avoir insisté sur la réponse. Je pensais que ta première réponse ne concernait pas mon cas car je l'avais testé dans mon contexte avec des tables existantes et j'avais une erreur remontée par DMB_METADATA, et n'ayant vu l'exemple de cette solution que pour les commentaires de table j'étais parti du principe que c'était une erreur de syntaxe ou de paramètre de ma part.

    Finalement en suivant ton exemple de test, je reproduis bien ton résultat. Merci pour ton aide, comme j'ai la réponse à ma question je considère la discussion résolu et je chercherais la source de mon erreur si un jour j'ai le temps et la curiosité (généralement c'est le premier critère qui manque ).

    Bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remerciements, propositions et commentaires
    Par HCath dans le forum Discussions diverses
    Réponses: 57
    Dernier message: 24/08/2006, 10h22
  2. [VB6] mettre en commentaires...
    Par nd25 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/04/2004, 15h15
  3. [VB6] - Mettre un morceau de ligne en commentaire
    Par inotna2099 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/11/2002, 11h03

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