Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 16/03/2009 14:26:25
- mourad
- Membre
Appel d'une fonction retournant un curseur
Bjr tout le monde, voici la fonction que j'ai crée
<Code>
CREATE OR REPLACE FUNCTION "theriaque"."get_the_infos" (varchar) RETURNS "pg_catalog"."refcursor" AS
$body$
DECLARE
NA ALIAS FOR $1;
curRet REFCURSOR;
BEGIN
OPEN curRet FOR
SELECT DEXTR_VER_THER_PK AS VERS, DEXTR_DATE_EXTR_PK AS DATE_EXT FROM DEXTR_DATE_EXTRACTION;
RETURN curRet;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
</Code>
Elle marche convenablement et je peux l'exécuter avec l'outil que j'utilise SQL Manager 2007 Lite for PostgreSQL.
Mais lorsque je veux l'exécuter autrement avec l'éditeur de commande en suivant le lien http://postgresql.developpez.com/faq...kees#appelproc, j'ai utilisé
<Code> SELECT * FROM GET_THE_INFOS('') AS (VERS varchar(10), DATE_EXTR date); </Code>
mais j'ai toujours l'erreur suivante : ERROR: a column definition list is only allowed for functions returning "record".
Est ce que quelqu'un pourrait m'orienter pour trouver mon erreur.
Merci d'avance.
Cordialement
Hors ligne
#2 16/03/2009 18:31:48
- gleu
- Administrateur
Re : Appel d'une fonction retournant un curseur
Tu déclares renvoyer un curseur seul. Donc la fonction doit se trouver dans la partie SELECT. Quelque chose comme :
SELECT GET_THE_INFOS('')
Guillaume.
Hors ligne
#3 17/03/2009 09:38:41
- mourad
- Membre
Re : Appel d'une fonction retournant un curseur
J'ai essayé cela mais j'ai comme sortie "unnamed portal 1". Je ne sais pas c'est du à quoi?
Hors ligne
#4 17/03/2009 11:16:37
- gleu
- Administrateur
Re : Appel d'une fonction retournant un curseur
Au fait que tu renvoies un curseur seulement. Pourquoi renvoies-tu un curseur ? pourquoi ne pas renvoyer les données de la requête du curseur ?
Pour tout savoir sur les curseurs dans les fonctions PL/pgsql, lire http://docs.postgresql.fr/8.3/plpgsql-cursors.html
Guillaume.
Hors ligne
#5 24/03/2009 11:57:33
- mourad
- Membre
Re : Appel d'une fonction retournant un curseur
En fait je suis au tout début avec PostgreSQL. Et comment faire pour envoyer directement les donnée de la requête du curseur. Est ce que je dois changer les paramètres de sortie et retourner les noms des colonnes et leur type au lieu d'un curseur ?
Merci pour votre collaboration.
Hors ligne
#6 24/03/2009 12:54:57
- gleu
- Administrateur
Re : Appel d'une fonction retournant un curseur
En fait, il n'est même pas utile de passer par un curseur. On peut renvoyer le retour d'une requête sans plus de traitement :
CREATE OR REPLACE FUNCTION get_the_infos()
RETURNS SETOF matable
LANGUAGE 'plpgsql'
AS
$body$
BEGIN
RETURN QUERY (SELECT * FROM matable);
END;
comme on peut renvoyer des données traitées après exécution de la requête:
CREATE OR REPLACE FUNCTION get_the_infos()
RETURNS SETOF matable
LANGUAGE 'plpgsql'
AS
$body$
DECLARE
r RECORD;
BEGIN
FOR r IN SELECT * FROM matable
LOOP
RETURN NEXT r;
END LOOP;
RETURN;
END;
Guillaume.
Hors ligne
#7 24/03/2009 18:23:25
- mourad
- Membre
Re : Appel d'une fonction retournant un curseur
merci pour ces informations utiles.
Hors ligne
Pages : 1