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 :

Execute Immediate paramétrable


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Août 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 65
    Par défaut Execute Immediate paramétrable
    Bonjour tout le monde,

    J'aimerais paramatrer le chargement des tables d'un schéma à partir d'un autre schéma de base de données.

    Pour ce faire, j'ai prévu une table qui contient les noms des tables à charger ( nom_table1, nom_table2). Et grâce à un curseur qui boucle sur cette table, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Execute immediate( 'create table' || table1 'as select * from '||table2);
    Or le problème, est que cette création ne se fait pas, sachant bien qu'elle marche si je l'exécute table par table !

    PS : J'ai déjà utilisé le Execute immediate avec le drop et ça marche !

    Merci d'avance,

    A vous

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    salut

    la commande n'est pas bonne;
    1- la concaénation est bizarre, il manque une partie
    2- il faut utiliser USING et les variables :1, :2 ... et non pas concaténer
    3- tu as oublié les espaces autour de || table, enfin ça n'a plus d'importance si tu suis le point 2.

    a+

  3. #3
    Membre actif
    Inscrit en
    Août 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 65
    Par défaut
    Merci pour votre réponse.

    Si j'ai bien compris, voilà ce que je devrais faire :
    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
     
     
    FOR v_cur in  CUR_TABLE_A_CHARGER Loop
     
                    begin 
                         v_req := 'Create Table :1 as select * from :2';
                         v_table1:= 'sch1.'||v_cur.table1;
                         v_table2 := 'sch2.'||v_cur.table2;
     
                         Execute immediate v_req using v_table1, v_table2;
     
                    Exception when others then DBMS_OUTPUT.PUT_LINE ('Problème de chargement de la table :' ||v_cur.table1 ||sqlerrm);
     
                    end;
     
            end loop;
    Mais ça ne marche toujours pas !

    Merci

  4. #4
    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
    La règle de base de l'execute immediate : Faire une sortie DBMS_OUTPUT de la chaine de caractère afin de voir le code exécuté..
    Sur ton premier post, tu aurais vu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'create table' || table1 'as select * from '||table2
     
    create tableTOTOas select * from TOTO2
    2- il faut utiliser USING et les variables :1, :2 ... et non pas concaténer
    NON. Ceci n'est à faire que pour les variables. On ne peut pas binder des noms de tables, des mots clés, etc..
    Donc utiliser une concaténation

  5. #5
    Membre actif
    Inscrit en
    Août 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 65
    Par défaut
    Le Oui vous avez raison, il y avait un problème d'espace.

    Mais la requête de s'exécute toujours pas !

  6. #6
    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
    As-tu vérifié la chaine exécutée ?

    Poste le code complet parce que comme ça c'est difficile à dire.

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

Discussions similaires

  1. [PLSQL] Erreur 00922 sur Execute immediate
    Par Henrisbg dans le forum Oracle
    Réponses: 5
    Dernier message: 17/11/2005, 16h06
  2. [PL/SQL] Execute immediate
    Par BiM dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/08/2005, 11h13
  3. Equivalents de EXECUTE IMMEDIATE ... RETURNING INTO ... ?
    Par swirtel dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/05/2005, 10h21
  4. [pl/sql] execute immediate
    Par Nadine dans le forum Oracle
    Réponses: 16
    Dernier message: 23/02/2005, 17h37
  5. Execute immediate et nom reserves
    Par nuke_y dans le forum Oracle
    Réponses: 3
    Dernier message: 22/11/2004, 18h17

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