IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Appel d'une stockée renvoyant un curseur


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut Appel d'une stockée renvoyant un curseur
    Bonjour tout le monde, j'ai crée la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    32
    33
    34
    35
    36
    37
    CREATE OR REPLACE FUNCTION "theriaque"."get_the_al_fic_spe" (numeric) RETURNS "pg_catalog"."refcursor" AS
    $body$
    DECLARE
      CodeId ALIAS FOR $1;
      curRet REFCURSOR;
    BEGIN
        OPEN curRet FOR 
        	SELECT DISTINCT t1.FGA_CODE_SQ_PK AS CODE_FICHE, 
    		 t1.FGA_DATECR	              AS DATECR,
    		 t1.FGA_DATEMJ	              AS DATEMJ, 
    		 t1.FGA_TYPEEFFET		      AS TYPEEFFET, 
    		 t1.FGA_PASSAGELAIT		      AS PASSAGELAIT,
    		 t1.FGA_FIXATIONPROTEIQUE	  AS FIXPROT, 
    		 t1.FGA_FIXATIONPROTEIQUE_MINI AS FIXPROTMINI,
    		 t1.FGA_FIXATIONPROTEIQUE_MAXI AS FIXPROTMAXI, 
    		 t1.FGA_PLASMALAIT		       AS PLASMALAIT,
    		 t1.FGA_PLASMALAIT_MINI	       AS PLASMALAITMINI, 
    		 t1.FGA_PLASMALAIT_MAXI        AS PLASMALAITMAXI,
    		 t1.FGA_CONCENTRATION		   AS CONCENT, 
    		 t1.FGA_CONCENTRATION_MINI	   AS CONCENTMINI,
    		 t1.FGA_CONCENTRATION_MAXI	   AS CONCENTMAXI, 
    		 t3.CDF_NOM                    AS CONCENTUNI
          FROM FGA_FICHEGRAL      t1 
           inner join FGASP_GRALSPE t2  on t1.FGA_CODE_SQ_PK = t2.FGASP_FGA_CODE_FK_PK
           left join CDF_CODIF t3 on  t1.FGA_CDF_UC_CODE_FK  = t3.CDF_CODE_PK AND  t3.CDF_NUMERO_PK= '19' 
           inner join FGAAFS_FGA_AFSSAPS t4	on t2.FGASP_SP_CODE_FK_PK = t4.FGAAFS_SP_CODE_FK_PK    
           								  AND  t4.FGAAFS_TYPEGRAL_PK  = 'A'
          WHERE  t2.FGASP_SP_CODE_FK_PK = CodeId   
          ORDER BY 1 ;
      RETURN curRet;
    END;
    $body$
    LANGUAGE 'plpgsql'
    VOLATILE
    CALLED ON NULL INPUT
    SECURITY INVOKER
    COST 100;
    Elle marche convenablement et je peux l'exécuter avec 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 "theriaque"."get_the_al_fic_spe" (156) as (CODE_FICHE numeric)/CODE]
    j'ai tjs l'erreur suivante : ERROR: a column definition list is only allowed for functions returning "record".
    J'ai essayé de faire juste : get_the_al_fic_spe(156), dans ce cas j'ai un message : "unnamed portal 1".
    Est ce que quelqu'un pourrait m'orienter pour trouver mon erreur.
    Merci d'avance.
    Cordialement

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 220
    Points
    220
    Par défaut
    Ajoutez un paramètre refcursor pour pouvoir le nommer et ensuite le lire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE FUNCTION theriaque.get_the_al_fic_spe (refcursor, numeric) RETURNS refcursor 
    AS
    $body$
    DECLARE
      CodeId ALIAS FOR $2;
    BEGIN
        OPEN $1 FOR ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT theriaque.get_the_al_fic_spe('cur', 156);
     
    FETCH ALL FROM cur;

  3. #3
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut
    Merci pour cette réponse, mais y a t-il une autre alternative pour récupérer le résultat sans ajouter de curseur. En fait j'ai 105 procédures et les modifier toutes prendra un temps considérable.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 220
    Points
    220
    Par défaut
    Je ne connais pas d'alternative... la commande FETCH a besoin d'un nom de curseur et je n'ai trouvé que ce moyen pour lui en donner un.

    Je vous renvoie vers la doc Postgres.

Discussions similaires

  1. Tester une procédure stockée renvoyant un curseur
    Par david71 dans le forum PL/SQL
    Réponses: 14
    Dernier message: 26/08/2008, 12h50
  2. Appels de procedures stockées dans une proc stockée ?
    Par Nadaa dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 17/07/2008, 10h32
  3. Appel d'une procédure stockée avec un curseur
    Par lapanne dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/12/2006, 16h24
  4. Appel de proc stockée ORACLE renvoyant un curseur à partir de DELPHI
    Par orphee13 dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/09/2006, 14h05
  5. Appel a une procedure stockée en vba
    Par The_Nail dans le forum VBA Access
    Réponses: 36
    Dernier message: 01/04/2003, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo