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

Oracle Discussion :

[ORACLE 9i] Recuperer le DDL d'un objet


Sujet :

Oracle

  1. #1
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut [ORACLE 9i] Recuperer le DDL d'un objet
    Bonjour,

    voila, j'ai fait un petit outil qui permet d'exporter toutes les tables d'une instance !

    Maintenant je voudrait pouvoir les creer a la volée et pour ca je cherche une vue qui me donne le DDL de chaque tables ...

    MErci !

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    all_tab_columns, all_contraints, all_indexes, etc...

  3. #3
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    Oui ok !

    J'ai cherché dans toute ces vue, mais j'en ai pas trouvé une pour laquelle je fasse un truc dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DDL FROM ALL_DLLS
    WHERE TABLE_NAME = 'MA_TABLE'
    Par exemple ...

  4. #4
    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
    Le package DBMS_METADATA est là pour cela.
    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

  5. #5
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    Merci SheikYerbouti pour ta reponse constructive ...

    Je vais voir ce que je trouve !

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut Re: [ORACLE 9i] Recuperer le DDL d'un objet
    Citation Envoyé par SubZero2
    Bonjour,

    voila, j'ai fait un petit outil qui permet d'exporter toutes les tables d'une instance !

    Maintenant je voudrait pouvoir les creer a la volée et pour ca je cherche une vue qui me donne le DDL de chaque tables ...

    MErci !
    si tu as un export de tes tables tu peux les re créer avec l'import sans pour autant inserer les lignes

  7. #7
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    oui mais je fait tout ca en Delphi et je charge mes tables avec SQLLoader.

    Mon seul souci c'est que si la table n'existe pas, je voudrait la creer mais en incluant les tablespaces, index, ...

    Je n'arrive pas a lancer une requetye avec DBMS_METADATA dans SqlPLus

    Requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DBMS_METADATA.GET_DDL('TABLE','USER_ALL_TABLES.MA_TABLE')
    FROM USER_ALL_TABLES;
    Reponse: Invalid Column Name

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    'USER_ALL_TABLES.MA_TABLE' n'est pas un nom de table

    USER_ALL_TABLES non plus d'ailleurs, c'est user_tables ou all_tables

    essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DBMS_METADATA.GET_DDL('TABLE','MA_TABLE')
    FROM ALL_TABLES;

  9. #9
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DBMS_METADATA.GET_DDL('TABLE','MA_TABLE') FROM ALL_TABLES;
    Toujours invalid column name ...

  10. #10
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par SubZero2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DBMS_METADATA.GET_DDL('TABLE','MA_TABLE') FROM ALL_TABLES;
    Toujours invalid column name ...
    Peux tu envoyer le message d'erreur

  11. #11
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    all_tables ne sert à rien au fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL>  SELECT DBMS_METADATA.GET_DDL('TABLE','TAB$','SYS') from dual;
     
    DBMS_METADATA.GET_DDL('TABLE','TAB$','SYS')
    --------------------------------------------------------------------------------
     
      CREATE TABLE "SYS"."TAB$"
       (    "OBJ#" NUMBER NOT NULL ENABLE,
            "DATAOBJ#" N
    T'as le droit de chercher un minimum aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SQL> desc DBMS_METADATA
    ...
    FUNCTION GET_DDL RETURNS CLOB
     Nom d'argument                  Type                    E/S par défaut ?
     ------------------------------ ----------------------- ------ --------
     OBJECT_TYPE                    VARCHAR2                IN
     NAME                           VARCHAR2                IN
     SCHEMA                         VARCHAR2                IN     DEFAULT
     VERSION                        VARCHAR2                IN     DEFAULT
     MODEL                          VARCHAR2                IN     DEFAULT
     TRANSFORM                      VARCHAR2                IN     DEFAULT
    ...

  12. #12
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    Et c'est ce que j'ai :

    http://www.dba-oracle.com/art_builde...ema_syntax.htm

    set pagesize 0
    set long 90000
    set feedback off

    set echo off
    spool scott_schema.sql
    connect scott/tiger;
    SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
    FROM USER_TABLES u;
    SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name)
    FROM USER_INDEXES u;
    spool off;
    Il doit quand meme servir a quelque chose le USER_TABLES ?? non ?

  13. #13
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Oui mais dans ce cas il n'y a pas de ''

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
    FROM USER_TABLES u;
    DDL de toutes les tables de USER_TABLES dont le nom est récupéré dans la colonne u.table_name. u étant l'alias de la table USER_TABLES

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     SELECT DBMS_METADATA.GET_DDL('TABLE','MA_TABLE')
    FROM dual;
    DDL de la table MA_TABLE

  14. #14
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    Bon, je doi etre le pire des boulets alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DBMS_METADATA.GET_DDL('TABLE','TOTO') FROM dual;
    Me renvoi "Invalid Column Name" quand meme alors que TOTO existe bien

  15. #15
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    merci de penser aux balises code

    Tu utilises bien SQL*Plus ? Sinon il faut voir avec le logiciel que tu utilises.

    C'est quoi l'erreur exacte ?

  16. #16
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    J'utilise bien SQL*Plus.

    Voici tout ce que j'ai a l'ecran :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','TOTO') FROM DUAL;
    SELECT DBMS_METADATA.GET_DDL('TABLE','TOTO') FROM DUAL
                         *
    ERREUR à la ligne 1 :
    ORA-00904: invalid column name
    Est-il possible que ce package ne soit pas present sur le serveur ???

    Je blaspheme peut etre la ...

  17. #17
    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
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    SQL> set long 20000
    SQL>  SELECT DBMS_METADATA.GET_DDL('TABLE','MESSAGES') FROM dual;
     
    DBMS_METADATA.GET_DDL('TABLE','MESSAGES')
    --------------------------------------------------------------------------------
     
      CREATE TABLE "ATENA"."MESSAGES"
       (    "CODE" NUMBER(5,0) NOT NULL ENABLE,
            "TEXTE" VARCHAR2(256) NOT NULL ENABLE,
            "TITRE" VARCHAR2(100),
            "STOP" VARCHAR2(1) DEFAULT 'N' NOT NULL ENABLE,
            "ALERTE" VARCHAR2(15),
             CONSTRAINT "MSG_PK" PRIMARY KEY ("CODE")
      USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
      STORAGE(INITIAL 131072 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
     
    DBMS_METADATA.GET_DDL('TABLE','MESSAGES')
    --------------------------------------------------------------------------------
      TABLESPACE "ATENA_IDX"  ENABLE,
             CONSTRAINT "AVCON_1069336221_STOP_000" CHECK (STOP IN ('O', 'N')) ENABLE
       ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
      STORAGE(INITIAL 2097152 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
      TABLESPACE "ATENA_DATA"
     
     
     
    SQL>
    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

  18. #18
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    non ce serait pas cette erreur

    que donne :

    et


  19. #19
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL> desc dual
     Nom                                       NULL ?   Type
     ----------------------------------------- -------- ----------------------------
     DUMMY                                              VARCHAR2(1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL> desc DBMS_METADATA
    ERROR:
    ORA-04043: object DBMS_METADATA does not exist
    Mon blaspheme, n'en etait donc pas un !!!
    BOn bah voila, merci messieurs, je pense que je vais me retourner vers mon expert oracle !

  20. #20
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    connecte toi system

    Et la version d'Oracle ? http://www.developpez.net/forums/viewtopic.php?t=318843

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [C#] Comment récupérer le nom d'un objet ?
    Par TERRIBLE dans le forum C#
    Réponses: 3
    Dernier message: 29/10/2006, 11h03
  2. Réponses: 6
    Dernier message: 24/08/2006, 12h17
  3. [ASE 12.5] DDL d'un objet type table
    Par lsone dans le forum Adaptive Server Enterprise
    Réponses: 3
    Dernier message: 08/08/2006, 10h42
  4. Recuperer le nom de l'objet du champ en cours.
    Par gregco1 dans le forum Débuter
    Réponses: 3
    Dernier message: 12/02/2006, 14h36
  5. [C++] recuperer la classe d'un objet
    Par erwan.bodere dans le forum C++
    Réponses: 2
    Dernier message: 30/11/2005, 10h14

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