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 :

Procédure qui sauvegarde un objet


Sujet :

PL/SQL Oracle

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut Procédure qui sauvegarde un objet
    Bonjour,
    j'aimerais créer, dans un package, la procédure suivante :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    PROCEDURE save_object_ddl(p_object IN Varchar2);
    Cette procédure va sauvegarder le code de création de l’objet passé en paramètre dans une table.

    Le problème, c'est que je ne vois pas du tout comment faire ! J'ai déjà cherché sur internet, mais rien à faire, j'y arrive pas. Quelqu'un pourrait-il m'aider ou me donner une piste ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Quel est ton SGBD ?

    Montre nous le code de ta procédure et explique nous ce qui ne fonctionne pas.
    Juste avec la déclaration, c'est difficile d'avoir des idées
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut
    J'utilise sqldeveloper.
    Par contre, justement, je n'ai encore que fais ça, car je n'ai absolument aucune idée de comment je pourrais le faire :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PROCEDURE save_object_ddl(p_object IN Varchar2) IS
    BEGIN
     
    END save_object_ddl;

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Regardez du côté de DBMS_METADATA.GET_DDL.

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Je te propose de commencer par
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut
    Merci à vous pour vos réponses rapides, et désolé pour le retard.
    J'ai pour l'instant avancé comme suit :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    PROCEDURE save_object_ddl(p_object IN Varchar2) IS
      v_type Varchar2;
      v_nom Varchar2;
      BEGIN
        select dbms_metadata.get_ddl('TABLE', 'MA_TABLE') from dual;
        select dbms_metadata.get_ddl('VIEW', 'MA_VUE') from dual;
        select dbms_metadata.get_ddl('INDEX', 'MON_INDEX') from dual;
        select dbms_metadata.get_ddl('PROCEDURE', 'MA_PROC_STOCK') from dual;
        select dbms_metadata.get_ddl('FUNCTION', 'MA_FONCTION') from dual;
        commit;
      END save_object_ddl;
    J'aimerais maintenant faire en sorte qu'au début de la procédure, au lieu d'avoir tous les "select dbms_metadata.get_ddl", il y aurait juste :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select dbms_metadata.get_ddl('v_type', 'v_nom') from dual;
    Et ce, peut importe le type d'objet passé en paramètre à la fonction, ce qui me donne un truc comme ça :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    PROCEDURE save_object_ddl(p_object IN Varchar2) IS
      v_type Varchar2(100);
      v_name Varchar2(100);
      BEGIN
        select object_name into v_name from all_objects
        where owner = user
        and object_name = p_object;
     
        select object_type into v_type from all_objects
        where owner = user
        and object_name = p_object;
     
         select dbms_metadata.get_ddl('v_type', 'v_nom') into save_object_ddl_table from dual;
        commit;
      END save_object_ddl;
    J'ai avant ça créé une table "save_object_ddl_table" :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    create table save_object_ddl_table (code varchar2(3000));
    Par contre j'ai une erreur :
    - Erreur(18,5): PL/SQL: SQL Statement ignored
    - Erreur(18,58): PLS-00403: l'expression 'SAVE_OBJECT_DDL_TABLE' ne peut être utilisée comme cible INTO d'une instruction SELECT/FETCH
    - Erreur(18,80): PL/SQL: ORA-00904: : identificateur non valide

    Quelqu'un sait d'où vient le problème ?
    Merci d'avance

  7. #7
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    Tu ne peux pas faire de select into une table
    Soit SELECT INTO Variable
    Soit INSERT INTO TABLE

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut
    Effectivement XD
    Pour ceux que ça intéresse, voilà ce que ça me donne au final :
    Code sql : 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
    PROCEDURE save_object_ddl(p_object IN Varchar2) IS
      v_type varchar2(100);
      v_name varchar2(100);
      ordreSQL varchar2(32767);
      BEGIN
        select object_name into v_name from all_objects
        where owner = user
        and object_name = p_object;
     
        select object_type into v_type from all_objects
        where owner = user
        and object_name = p_object;
     
        insert into save_object_ddl_table values (dbms_metadata.get_ddl('v_type', 'v_nom'));
        commit;
      END save_object_ddl;

  9. #9
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    2 select pour ramener 2 colonnes d'une même table
    Un seul suffit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    PROCEDURE save_object_ddl(p_object IN Varchar2) IS
      v_type varchar2(100);
      v_name varchar2(100);
      ordreSQL varchar2(32767);
      BEGIN
        SELECT object_name, object_type
        INTO v_name, v_type FROM all_objects
        WHERE owner = user
        AND object_name = p_object;
     
        INSERT INTO save_object_ddl_table VALUES (dbms_metadata.get_ddl('v_type', 'v_nom'));
        commit;
      END save_object_ddl;

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Et tout simplement comme ça, ça ne suffit pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO save_object_ddl_table
    SELECT  dbms_metadata.get_ddl(object_type, object_name) 
    FROM    all_objects
    WHERE   owner = user
        AND object_name = p_code
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

Discussions similaires

  1. Ou placer une procédure stockée qui sauvegarde toutes les bases ?
    Par arthuro45 dans le forum Administration
    Réponses: 4
    Dernier message: 27/09/2010, 21h04
  2. Réponses: 2
    Dernier message: 21/04/2006, 14h32
  3. sauvegarder un objet au format .x
    Par sylvain_bos dans le forum DirectX
    Réponses: 3
    Dernier message: 19/08/2004, 23h05
  4. function qui renvois un objet ?
    Par mattmat dans le forum ASP
    Réponses: 4
    Dernier message: 23/04/2004, 11h35
  5. [arbre] Sauvegarder un objet dans un fichier
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 00h55

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