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 22/10/2006, 10h54   #1
Nouveau Membre du Club
 
Inscription : février 2003
Messages : 148
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 148
Points : 39
Points : 39
Par défaut PL/SQL resultat select

Bonjour,

Dois-je forcement utiliser un CURSOR pour recuperer une seule ligne d'une requete select ou existe-il une autre methode?

Merci pour votre aide
laurent1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2006, 11h26   #2
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Vous pouvez récupérer une ligne unique avec la syntaxe

Code :
1
2
3
SELECT ...
INTO  ...
FROM ...
Si le select ramène plus d'une ligne, vous récupérez l'erreur TOO_MANY_ROWS.
Si le select ne ramène rien, vous récupérez l'erreur NO_DATA_FOUND
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2006, 11h41   #3
Nouveau Membre du Club
 
Inscription : février 2003
Messages : 148
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 148
Points : 39
Points : 39
donc je je comprends bien, je peux faire :

Code :
1
2
 
SELECT * INTO my_record FROM my_table WHERE (id=1212)
Le resultat du select sera explotable dans l'objet record ?
laurent1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 07h56   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
dans la variable... pas l'objet.

pour plus d'information : http://sheikyerbouti.developpez.com/pl_sql/
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 15h51   #5
Nouveau Membre du Club
 
Inscription : février 2003
Messages : 148
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 148
Points : 39
Points : 39
Ok, par contre, j'ai un souci au niveau de la compilation, je ne peux pas utiliser une variable pour la requete select. Je m'explique :

Code :
1
2
3
 
matable:='configuration'
SELECT * FROM matable;
y veux pas compiler car le nom de la table est dynamique!

y a t-il un moyen pour passer au travers ?

merci
laurent1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 15h55   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
en effet, il faut faire du sql synamique dans ce cas.
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 16h00   #7
Nouveau Membre du Club
 
Inscription : février 2003
Messages : 148
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 148
Points : 39
Points : 39
Super, on fait comment ?
laurent1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 16h16   #8
Nouveau Membre du Club
 
Inscription : février 2003
Messages : 148
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 148
Points : 39
Points : 39
Execute immediate ?
laurent1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 16h21   #9
Membre régulier
 
Inscription : octobre 2002
Messages : 227
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : octobre 2002
Messages : 227
Points : 78
Points : 78
il faut utiliser "execute immediate"

petit exemple :
---------------

matable varchar2(100) :='configuration';
col1 varchar2(100) :='name';
value_col1 varchar2(100);
monsql varchar2(200);

monsql:='SELECT '||col1||' FROM '||matable;

execute immediate(monsql) into value_col1;

--> Et par la suite utiliser le variable "col1"
--> +ajouter les autres colonnes à réceptioner

NB : ne pas concaténer de ';' à la fin de la commande.
----
lediz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 16h34   #10
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Ceci marche si la requête retourne au maximum 1 ligne ....

Sinon il faut utiliser la clause BULK COLLECT avec des tableaux http://sheikyerbouti.developpez.com/execute_immediate/
ou des variables de curseur/REF CURSOR (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/06_ora.htm#1510)
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 16h39   #11
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Citation:
Envoyé par laurent1
Execute immediate ?
la fonction recherche est ton amie
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 17h15   #12
Nouveau Membre du Club
 
Inscription : février 2003
Messages : 148
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 148
Points : 39
Points : 39
Merci a tous
laurent1 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 06h32.


 
 
 
 
Partenaires

Hébergement Web