Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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
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
Pages : 1