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 :

Sauvegarder le ddl d'un schéma


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 9
    Par défaut Sauvegarder le ddl d'un schéma
    Bonjour tous le monde,

    Je sollicite votre aide car je suis bloqué depuis un bon moment sur un problème qui vas paraitre simple à ceux qui ont de l'expérience.

    Mon but est de sauvegarder le ddl d'un schéma à l'aide d'une procédure/fonction d'un package.

    J'ai une première fonction qui récupère le type d'un objet en fonction du nom de celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    FUNCTION get_object_type(p_table_name IN Varchar2) RETURN Varchar2  AS
      object_type Varchar2(20);
      nb_object_type NUMBER;
      PARAM_NULL EXCEPTION;
      BEGIN
        SELECT COUNT(*) into nb_object_type FROM user_objects WHERE object_name = upper(p_table_name);
          SELECT object_type into object_type FROM user_objects WHERE object_name = upper(p_table_name);
          RETURN object_type;
        EXCEPTION
        WHEN NO_DATA_FOUND THEN
          Raise_application_error(-20002,'Aucun objet n a été trouvée');
        WHEN TOO_MANY_ROWS THEN
          Raise_application_error(-20003,'Trop d objet ont été trouvées');
      END get_object_type;
    J'en ai une deuxième qui récupère le ddl d'un objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    FUNCTION get_ddl(object_name IN Varchar2) RETURN Varchar2  AS
        object_ddl Varchar2(4000);
        temp VARCHAR2(50);
      BEGIN
        temp:= get_object_type(object_name);
        dbms_metadata.set_filter()
        SELECT DBMS_METADATA.GET_DDL(upper(temp),upper(object_name)) into object_ddl FROM dual;
        RETURN object_ddl;
      END get_ddl;
    Puis une dernière qui récupère tous les ddl du schéma :
    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
    PROCEDURE save_object_ddl(p_object IN Varchar2) AS
      object_type Varchar2(20);
      object_ddl Varchar2(4000);
      date_now Varchar2(50);
      table_existe number;
      TABLE_INEXISTANTE EXCEPTION;
      BEGIN
        SELECT COUNT(*) into table_existe FROM user_tables where table_name='SAVE_CODE';
        IF (table_existe=1) THEN
          object_type := get_object_type(p_object);
          object_ddl := get_ddl(p_object);
          SELECT to_char(SYSDATE, 'dd.mm.yyyy hh24.mi.ss') INTO date_now FROM dual;
          Execute immediate'INSERT INTO save_code(nb, object_creation_code, row_creation_date) values(:1,:2,:3)' using seq_save_code .nextval, object_ddl,date_now;
        ELSE
          RAISE TABLE_INEXISTANTE;
        END IF;
        EXCEPTION
        WHEN TABLE_INEXISTANTE THEN
          Raise_application_error(-20006,'Table inexistante');
      END save_object_ddl;
    Mon problème est que quand il doit sauvegarder les packages il y a une erreur car le package est composé de son body et de sa signature. Et la paf mon programme plante car les type sont identiques et que ma fonction get_ddl récupère en fonction du type et du nom de l'objet. Il me retourne donc un too_many_rows logique...

    On m'a dit d'essayer avec un filtre sur un DBMS_METADATA.

    J'essaye depuis un bon moment et je n'y arrive pas.

    Est-ce que quelqu'un aurait la gentillesse de m'aider?

    Merci d'avance d'avoir lu ce post et bonne journée.

  2. #2
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Bonjour,

    Je suis désolée de ne pas répondre exactement à votre question (à savoir comment résoudre l'erreur que vous rencontrez), mais je peux vous proposer une solution alternative :
    Si votre but est uniquement de faore une sauvegarde de la strcuture de la base, vous pouvez le faire avec import/export (Oracle 9i et inférieur) ou avec datapump (Oracle 10g et supérieur).

    Enfin, l'utilitaire d'import d'Oracle avec le paramètre indexfile vous permet de générer ce ddl à partir d'un fichier d'export.

    Cordialement,

    Arkhena

Discussions similaires

  1. Sauvegarde DDL/DML Innodb respectant FK
    Par MaitrePylos dans le forum Administration
    Réponses: 6
    Dernier message: 23/11/2009, 19h32
  2. Réponses: 4
    Dernier message: 26/03/2008, 10h16
  3. Réponses: 4
    Dernier message: 26/03/2008, 10h16
  4. Sauvegarde schéma tables
    Par masseur dans le forum DBDesigner
    Réponses: 0
    Dernier message: 07/02/2008, 09h34
  5. Comment génére le DDL d'un Schéma Oracle ?
    Par elitost dans le forum Oracle
    Réponses: 3
    Dernier message: 28/09/2006, 15h35

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