Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
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 11/05/2011, 17h11   #1
Invité de passage
 
Homme
Consultant ERP
Inscription : mai 2011
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Consultant ERP

Informations forums :
Inscription : mai 2011
Messages : 1
Points : 0
Points : 0
Par défaut Problème execute immediate dans boucle

Bonjour à tous,

Je souhaite récupérer dans une variable la concaténation de toutes les colonnes d'un curseur dans une boucle for.
Les colonnes de mes tables sont amenées à changer, je construis donc au préalable ma requête (la dessus je m'en sors, j'ai simplifié dans le code ci-dessous).
Mais c'est lorsque je veux que ma variable requête soit interpréter afin de mettre la concaténation dans une variable concat_col que je bloque.
J'ai essayé pas mal de chose avec un "execute immediate" et un select bidon. Mais même dans ce cas je rencontre l'erreur :

ORA-00904: "CURSEUR"."name_col2_tab2": invalid identifier

Comme si le curseur était hors context.




Code sql :
1
2
3
4
5
6
7
8
9
10
declare
requete VARCHAR2(2000);
concat_col VARCHAR2(2000);
begin
requete := 'curseur.name_col1_tab1 || '':'' || curseur.name_col2_tab1 || '':'' || curseur.name_col1_tab2 || '':'' || curseur.name_col2_tab2';
FOR curseur IN (SELECT * FROM table1, table2)
loop
EXECUTE IMMEDIATE requete INTO concat_col;  --?????? ligne problématique
end loop;
end;


Je ne sais pas si c'est très clair, n'hésitez pas à me demander des précisions.

Merci pour votre aide, je n'ai plus d'idée.
jea00 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 09h11   #2
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Nom de diou !

Un EXECUTE IMMEDIATE doit contenir un ordre SQL (select, update, insert, etc)
Code :
1
2
3
4
5
6
7
8
declare
requete VARCHAR2(2000);
concat_col VARCHAR2(2000);
begin
requete := 'SELECT table2.name_col1_tab1 ||'':''|| table1.name_col2_tab1 || '':'' || table2.name_col1_tab2 || '':''|| table2.name_col2_tab2 FROM table1,table2';
EXECUTE IMMEDIATE requete INTO concat_col; 
end;
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h00.


 
 
 
 
Partenaires

Hébergement Web