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 :

Utilisation de EXECUTE IMMEDIATE


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 20
    Par défaut Utilisation de EXECUTE IMMEDIATE
    Bonjour,

    je souhaite exécuter une requête utilisant des variables (ex :champs_table1 (voir la requête ci dessous) ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    lettre:='D';
       req_insert := 'INSERT INTO d_dossiers_tc(dos_numero,detat_detat_code,tev_tev_c_evop,dos_date_emission,dos_date_depot,dos_date_etat,dos_dos_numero,ind_v_num_individu,dos_n_recommande,'||champs_table1||',dos_n_reference,dos_n_accuse) VALUES ('''||lettre||''' || TRIM (v_ligne_cur.dos_em_numero),v_ligne_cur.tsi_tsi_c_tsi,v_ligne_cur.tev_tev_c_evop,v_ligne_cur.dos_date_emission,v_ligne_cur.dos_date_emission,SYSDATE,v_ligne_cur.dos_dos_em_numero,v_ligne_cur.ind_v_num_individu,v_ligne_cur.dos_em_n_recomande,v_ligne_cur.'||champs_table2||',v_ligne_cur.dos_em_exercice,v_ligne_cur.dos_n_accuse)';
     
     
    EXECUTE IMMEDIATE req_insert ;
    le problème c'est ça plante au niveau d'EXECUTE IMMEDIATE , est ce dû à la longueur de la chaine (req_insert)? ou un autre problème?

    je précise que je travail sous oracle 9i

    merci d'avance

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 211
    Par défaut
    Bonjour,

    Que donne la requête si tu la sors en message?

  3. #3
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v_ligne_cur.dos_em_numero
    Ca sent les variables plsql..
    Le Execute immediate ne voit pas les variables de la procédure appelante.

    Il faut tout mettre en dur (comme le '|| lettre ||' ) ou mieux utiliser du binding. (paramètres IN).
    Par contre pour ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v_ligne_cur.'||champs_table2||
    tu vas avoir du mal, on ne peut pas accéder à un champ d'un curseur dynamiquement, il faut le gérer soit même.

  4. #4
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 20
    Par défaut
    Merci McM

  5. #5
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 20
    Par défaut
    elle n'affiche rien, mais quand je la découpe en trois parties, elles s'affichent, j'ai alors décidé de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    req_in1:='INSERT INTO d_dossiers_tc(dos_numero,detat_detat_code,tev_tev_c_evop,dos_date_emission) VALUES ('''||lettre||''' || TRIM (v_ligne_cur.dos_em_numero),v_ligne_cur.tsi_tsi_c_tsi,v_ligne_cur.tev_tev_c_evop,v_ligne_cur.dos_date_emission)';
        req_in2:='UPDATE d_dossiers_tc SET dos_date_depot=v_ligne_cur.dos_date_emission,dos_date_etat=SYSDATE,dos_dos_numero=v_ligne_cur.dos_dos_em_numero,ind_v_num_individu=v_ligne_cur.ind_v_num_individu WHERE dos_numero='''||lettre||''' || TRIM (v_ligne_cur.dos_em_numero)';
        req_in3:='UPDATE d_dossiers_tc SET dos_n_recommande=v_ligne_cur.dos_em_n_recomande,'||champs_table1||'=v_ligne_cur.'||champs_table2||',dos_n_reference=v_ligne_cur.dos_em_exercice,dos_n_accuse=v_ligne_cur.dos_n_accuse WHERE dos_numero='''||lettre||''' || TRIM (v_ligne_cur.dos_em_numero)';
     
        EXECUTE IMMEDIATE req_in1;
        EXECUTE IMMEDIATE req_in2;
        EXECUTE IMMEDIATE req_in3;
    mais ça aussi ne marche pas.

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

Discussions similaires

  1. script pour d'utiliser la commande execute immediate
    Par menoran dans le forum Oracle
    Réponses: 4
    Dernier message: 04/05/2010, 18h36
  2. Réponses: 0
    Dernier message: 29/04/2010, 12h20
  3. [pl/sql] execute immediate
    Par Nadine dans le forum Oracle
    Réponses: 16
    Dernier message: 23/02/2005, 17h37
  4. 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