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

PostgreSQL Discussion :

Problème pour retourner des record


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 10
    Points : 10
    Points
    10
    Par défaut Problème pour retourner des record
    Bonjour,

    J'ai un souci avec ma procédure, pour retourner des record.
    Après des recherches sur le forum, j'ai vu qu'il fallait faire une boucle, j'ai donc transformé mon code comme suit :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    REATE OR REPLACE FUNCTION "public"."analyse_union_1" ("Debut" varchar, "Fin" varchar) RETURNS SETOF record AS
    $body$
    DECLARE
    	rec RECORD;
    BEGIN
    TRUNCATE TABLE "Stat_AnalyseUnion1";
     
    -- REQUETE ANALYSE FILTRE 1
        CREATE TEMPORARY TABLE "tempfiltre1" AS
    	SELECT 
        	(SUBSTRING (sunocfe FROM 1 FOR 1) || sutyplia) AS nocfe,
        	(SUBSTRING(sudtcreat FROM 1 FOR 4) || ' ' || SUBSTRING (sudtcreat FROM 5 FOR 2)) AS temp_mois,
            sulieven, 
            COALESCE(codebassin, 'AUTRE') as codebassin
        FROM
        	"vuesuivi"
            LEFT JOIN geobassin
            ON (sucodpos || sucomm) =  commune
        WHERE
        	sulieven like '0%'
            AND ((sudtcreat >= $1)
            	and (sudtcreat <= $2)) ;
     
     
    -- REQUETE ANALYSE 1     
    FOR rec IN 
    ( SELECT
      	numero,
        libelle,
        typcfe,
        mois,
        design_bassin,
        count(sulieven) as nombre
    FROM
    	"Stat_ReqAnaPERIODE"
        LEFT JOIN tempfiltre1
        ON 	code_bassin = codebassin
        	AND code_evt = nocfe
            AND mois = temp_mois  
    GROUP BY
    	numero, libelle, typcfe,mois,design_bassin
    HAVING 
    	(numero = 1)
    ORDER BY
    	typcfe, mois, design_bassin  )
    LOOP
       RETURN NEXT rec ;
     END LOOP ;
     RETURN ;
    END;
     
    $body$
    LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
    Le problème c'est que j'ai encore un message d'erreur lorsque je veux executer la procédure :
    ERROR: wrong record type supplied in RETURN NEXT
    CONTEXT: PL/pgSQL function "analyse_union_1" line 46 at return next
    Je ne sais pas d'où peut venir mon erreur.
    En fait, je veux tout simplement récupérer le résultat de mon SELECT

    Merci de votre aide.

  2. #2
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    a vue d'oeil il doit avoir une erreur à la ligne
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    J'ai trouvé l'erreur... en fait, le code est bon, mais quand je définissais les valeur de retour, j'avais défini ma variable "nombre" comme un integer, alors que count() retourne un bigint !
    Ca marche beaucoup mieux du coup !

    (Je viens de voir ça en continant de chercher sur le forum).

    Merci beaucoup en tout cas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Système] Problème pour effectuer des calculs
    Par tissard dans le forum Langage
    Réponses: 10
    Dernier message: 09/12/2005, 14h07
  2. [win] problème pour partager des fichiers entre 2 pc
    Par goma771 dans le forum Administration
    Réponses: 1
    Dernier message: 01/12/2005, 16h15
  3. [XML word] problème pour créer des puces
    Par ratapapa dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 21/07/2005, 13h52
  4. Problème pour Télécharger des fichiers
    Par joce3000 dans le forum C++Builder
    Réponses: 8
    Dernier message: 21/01/2005, 10h30
  5. problème pour faire des blocs
    Par tinkye_winkye dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 04/01/2005, 14h13

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