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 03/03/2007, 13h53   #1
Invité de passage
 
Étudiant
Inscription : février 2007
Messages : 13
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 13
Points : 1
Points : 1
Par défaut Problème clause "ORDER BY" dans bloc PL/SQL

Bonjour,
j'ai une fonction qui affiche la liste des employés grace à un curseur. Dans ma fonction j'ai un paramètre : "critere" qui sert dans la requêtre SQL pour pouvoir trier les résultats en fonction de ce critère. Mon problème est que critère est un varchar2 et à pour valeur par défaut : 'nom_emp' et lorsque je crée mon curseur, la requête marche mal puisque dans mon ORDER BY est fait comme ceci :
ORDER BY 'nom_emp' alors que je voudrais que ça soit : ORDER BY nom_emp
sans les ' '.
Le problème est que je ne peux pas mettre les ' ' dans le paramètre de ma fonction donc je souhaiterai convertir la chaine 'nom_emp' en nom_emp pour que le ORDER BY marche.
Dans la page, je fais une liste déroulante avec le critère de tri choisi et là encore j'utilise mes paramètres 'nom_emp', 'prenom_emp' ... qui comportent eux aussi des apostrophes que je souhaite là aussi enlever pour que le "ORDER BY" fonctionne.

Voici une partie du code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
CREATE OR REPLACE PROCEDURE listeEmp(critere varchar2 DEFAULT 'nom_emp') IS
cursor CEmp IS
SELECT num_emp, nom_emp, prenom_emp, date_nais_emp, adresse_emp,
		ville_emp, cp_emp, tel_emp, sexe_emp, date_embauche_emp
FROM EMPLOYE ORDER BY critere ;
BEGIN
	HTP.htmlOpen ; HTP.bodyOpen ;
        ...
	HTP.formOpen('listeEmp') ;
		HTP.tableOpen(cattributes=>'border="1", bordercolor="BLUE", align="center"') ;
        ...
			HTP.tableRowOpen ;
				HTP.tableData('Criteres de tri :') ;
				HTP.tableData(cvalue=>HTF.formSelectOpen('critere') || HTF.formSelectOption('nom_emp')
							  || HTF.formSelectOption('prenom_emp') || HTF.formSelectOption('date_nais_emp')
							  || HTF.formSelectOption('ville_emp')  || HTF.formSelectOption('cp_emp')
							  || HTF.formSelectOption('sexe_emp')   || HTF.formSelectOption('cp_emp')
							  || htf.formSelectClose) ;
				HTP.tableData(cvalue=>HTF.formSubmit(cvalue=>'OK'), calign=>'right') ;
				HTP.tableData(critere) ;		  
 
                               ...
 
			HTP.tableRowClose ;
		HTP.tableClose ;
	HTP.formClose ;
	HTP.bodyClose ;	HTP.htmlClose ;
END listeEmp ;
/
Merci pour votre aide.
craweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2007, 15h29   #2
Membre du Club
 
Inscription : novembre 2005
Messages : 144
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 144
Points : 59
Points : 59
Bonjour, regarde du coté du SQL dynamique (execute immediate)
coco-sup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2007, 16h44   #3
Invité de passage
 
Étudiant
Inscription : février 2007
Messages : 13
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 13
Points : 1
Points : 1
Bonjour,
je ne comprend pas bien comment je pourrai faire ceci si tu pouvais me détailler un peu plus comment faire.
Merci.
craweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 09h33   #4
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
2 solutions :
- soit tu passes par du sql dynamique, dans ce cas fais une recherche sur ref cursor dans le forum, tu trouveras plein d'exemples.

- soit tu restes en SQL statique et tu gères ta clause order by par un decode :
Code :
ORDER BY decode (critere, 'nom_emp', nom_emp, 'colX', colX, ...)
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web