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 :

insert nom de table dynamique


Sujet :

PL/SQL Oracle

  1. #1
    Membre Expert Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Par défaut insert nom de table dynamique
    Bonjour,

    j'ai créé une procédure stockée qui doit me donner la possiblité de transférer des données
    d'une table à l'autre, en utilisant du PHP au dessus.
    le nom de la table source et cible sont dynamiques.
    ainsi qu'une variable ulisateur.

    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
     
    create or replace
    function transfert_gen(in_table IN VARCHAR2, out_table IN VARCHAR2,utilisateur IN VARCHAR2) RETURN
      BOOLEAN
    IS
      REQUETE VARCHAR2(255);
    BEGIN
     
      REQUETE := 'INSERT INTO '||out_table||' select * from '||in_table||' where CDUSR='''||utilisateur||'''';  
      EXECUTE IMMEDIATE REQUETE USING out_table, in_table, utilisateur;
     
      RETURN TRUE;
      EXCEPTION
        WHEN OTHERS THEN 
          dbms_output.put_line(requete);
          dbms_output.put_line('SQLERR'||SQLCODE);
          RETURN FALSE;
    END;
    Problème j'ai un retour ORA-1006, par contre l'affichage de la requête est correcte. si je l'effectue en mode natif dans SQL+ pas de problème ....??

    olivier

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      REQUETE := 'INSERT INTO '||out_table||' select * from '||in_table||' where CDUSR= :b1';
      EXECUTE IMMEDIATE REQUETE USING utilisateur;
    Et à revoir le Sql Dynamique.

  3. #3
    Membre Expert Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Par défaut erreur 1006
    Bonjour,

    Ok, cela fonctionne, je n'avais pas vu la dernière subtilité sur la dernière ligne.
    Question :
    pourquoi doit on passer la clause where avec :value ?

    c'est mon erreur

    L'insert fonctionne mais je ne suis pas en mode commit, quand je rajoute

    ..... :b1; commit; j'ai encore une erreur 911 ?

    désolé si j'abuse, merci

    olivier

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Le ":" indique l’utilisation d’une variable de liaison (binding variable) ce qui permet à Oracle réduire le nombre de hard parses.
    Rajoute le commit dans la procédure après Execute Immediate.

  5. #5
    Membre Expert Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Par défaut Bonjour
    Bonjour,

    C'est fini cela fonctionne avec le commit;
    J'avais déjà fais mais rien ne fonctionnait, dans la confusion
    ...

    en tout cas merci

    olivier

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

Discussions similaires

  1. Requête - Nom de table dynamique
    Par kming dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/02/2010, 10h51
  2. [MySQL] Nom de table dynamique dans une jointure
    Par CsJoe dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 05/08/2009, 14h13
  3. Procédure stockée et nom de table dynamique
    Par chatlumo dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 15/02/2009, 14h29
  4. [MS SQL SERVER 2k5]nom de table dynamique dans un curseur
    Par patriceharel dans le forum Développement
    Réponses: 2
    Dernier message: 16/12/2008, 11h03
  5. Select avec nom de table dynamique
    Par boutss dans le forum SQL
    Réponses: 6
    Dernier message: 31/01/2007, 09h51

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