Vous n'êtes pas identifié(e).

#1 03/02/2009 15:34:53

slash
Membre

ORDER BY paramétré

Bonjour à tous,

Décidément aujourd'hui est la journée ou je n'avance pas...
Je rencontre ce problème :

J'ai une procédure stockée qui me retourne un curseur sur un gros SELECT. Par contre j'aimerai avoir une clause ORDER BY qui soit paramétrable.
C'est à dire que l'un des paramètre de ma procédure est un varchar où j'aimerai passer le paramètre de la clause ORDER BY.

Je n'ai pas de message d'erreur, mais cela ne tri rien :

CREATE OR REPLACE FUNCTION "PG_GetEvtInfos"("Curseur" refcursor, "Filter" varchar, "Order" varchar)
RETURNS refcursor AS
$$
BEGIN
	OPEN "Curseur" SCROLL FOR
		SELECT 
		"HIST_EVT_CODE",
		FROM "HISTORY" 

		ORDER BY "Order";

		RETURN "Curseur";
END;
$$
LANGUAGE plpgsql;

A noter que j'aimerai effectuer la même chose avec la clause WHEN, ceci explique le paramètre "Filter".

Si qq'un a une idée, c'est sympa!
Merci smile

Hors ligne

#2 03/02/2009 17:04:26

gleu
Administrateur

Re : ORDER BY paramétré

La substitution de variables ne se fait pas. Tu dois créer ta requête dans une variable de type text et faire un OPEN curseur FOR execute ta variable. Autrement dit :

marequete := 'SELECT "HIST_EVT_CODE" FROM "HISTORY" ORDER BY "'||Order||'"';
OPEN "Curseur" SCROLL FOR EXECUTE marequete;
RETURN "Curseur";

Voir http://docs.postgresql.fr/8.3/plpgsql-cursors.html pour les détails.

PS : évite les majuscules dans les noms d'objets avec PostgreSQL, ça devient vite une galère.

PS2 : j'ai supprimé la virgule en trop entre le nom de colonne et le mot clé FROM.


Guillaume.

Hors ligne

#3 03/02/2009 18:17:34

slash
Membre

Re : ORDER BY paramétré

Merci beaucoup gleu, tu m'enlèves une belle épine du pied.
En effet, je n'avais pas parcouru la commande EXECUTE...

Hors ligne

Pied de page des forums