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 09/01/2012, 16h58   #1
Membre régulier
 
Homme
Ingénieur développement logiciels
Inscription : mai 2011
Messages : 34
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 : 34
Points : 78
Points : 78
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 :
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.
Juda_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 17h30   #2
Rédacteur
 
Inscription : décembre 2002
Messages : 2 389
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 389
Points : 3 276
Points : 3 276
La procédure GET_DEPENDENT_DDL devrait vous convenir :

Code :
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'
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 10/01/2012, 08h27   #3
Membre régulier
 
Homme
Ingénieur développement logiciels
Inscription : mai 2011
Messages : 34
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 : 34
Points : 78
Points : 78
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.
Juda_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 09h51   #4
Rédacteur
 
Inscription : décembre 2002
Messages : 2 389
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 389
Points : 3 276
Points : 3 276
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 :
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'
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 11/01/2012, 08h27   #5
Membre régulier
 
Homme
Ingénieur développement logiciels
Inscription : mai 2011
Messages : 34
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 : 34
Points : 78
Points : 78
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.
Juda_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h16.


 
 
 
 
Partenaires

Hébergement Web