Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/05/2011, 11h59   #1
Invité régulier
 
azer mery
Inscription : avril 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : azer mery

Informations forums :
Inscription : avril 2010
Messages : 20
Points : 5
Points : 5
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 :
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
meryazer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 12h24   #2
Membre du Club
 
Inscription : décembre 2010
Messages : 190
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 190
Points : 60
Points : 60
Bonjour,

Que donne la requête si tu la sors en message?
AbouZaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 12h29   #3
Invité régulier
 
azer mery
Inscription : avril 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : azer mery

Informations forums :
Inscription : avril 2010
Messages : 20
Points : 5
Points : 5
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 :
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.
meryazer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 12h30   #4
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
Code :
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 :
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.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 10h01   #5
Invité régulier
 
azer mery
Inscription : avril 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : azer mery

Informations forums :
Inscription : avril 2010
Messages : 20
Points : 5
Points : 5
Merci McM
meryazer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h39.


 
 
 
 
Partenaires

Hébergement Web