Skip site navigation (1) Skip section navigation (2)

Pb de type composite

From: Sébastien Dinot <sdinot(at)april(dot)org>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: Pb de type composite
Date: 2007-04-11 20:37:57
Message-ID: 20070411203757.GB6225@achille.maison (view raw or flat)
Thread:
Lists: pgsql-fr-generale
Bonjour à tous,

J'ai écrit quelques procédures stockées en SQL que j'ai testées sous
PostgreSQL 8.1. Elles fonctionnent à merveille. Les mêmes procédures
sous PosgreSQL 7.4 génèrent une erreur et je ne comprends pas
pourquoi.

Voici les éléments :

- La requête porte sur une vue nommée « adherent ».


- La procédure stockée est la suivante :

  ====================================================================

  CREATE FUNCTION cotisation_en_retard (VARCHAR) RETURNS SETOF adherent_a_contacter AS
  '
    SELECT identite,
           email,
           echeance,
           ecart
      FROM adherent
     WHERE categorie = $1
       AND ecart < 0
       AND anciennete > 30
     ORDER BY echeance ASC;
  ' LANGUAGE 'sql';

  ====================================================================


- Le type de données composite renvoyé par la procédure est défini ainsi :

  ====================================================================

  CREATE TYPE adherent_a_contacter AS
  (
    identite VARCHAR(100),
    email    VARCHAR(100),
    echeance DATE,
    ecart    INTEGER
  );

  ====================================================================


Sous PostgreSQL 8.1, les requêtes suivantes fonctionnent :

======================================================================

adherents=> SELECT * FROM cotisation_en_retard('individu');
    identite     |      email       |  echeance  | ecart
-----------------+------------------+------------+-------
 Sébastien DINOT | sdinot(at)april(dot)org | 2007-03-10 |  -32
(1 ligne)


adherents=> SELECT cotisation_en_retard('individu');
                  cotisation_en_retard
---------------------------------------------------------
 ("Sébastien DINOT",sdinot(at)april(dot)org,2007-03-10,-32)
(1 ligne)

======================================================================


Sous PostgreSQL 7.4, la même requête donne :

======================================================================

adherents=> SELECT * FROM cotisation_en_retard('individu');
ERROR:  query-specified return row and actual function return row do not match

adherents=> SELECT cotisation_en_retard('individu');
ERROR:  cannot display a value of type record

======================================================================


Bien évidemment, lorsque j'injecte mon schéma et mes procédure dans la
base fraîchement créée, PostgreSQL ne me retourne ni avertissement ni
erreur.

Avez-vous une idée de ce qui cloche et de la manière d'y remédier ?

Je vous remercie par avance,

A++, Sébastien

-- 
Sébastien Dinot, sdinot(at)april(dot)org
Secrétaire de l'APRIL (http://www.april.org)
Association pour la Promotion et la Recherche en Informatique Libre

Responses

pgsql-fr-generale by date

Next:From: Sébastien DinotDate: 2007-04-11 21:12:47
Subject: [RESOLU] Re: Pb de type composite
Previous:From: ncossetDate: 2007-04-11 12:43:45
Subject: triggers

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group