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
Views: Raw Message | Whole Thread | Download mbox | Resend email
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

Browse pgsql-fr-generale by date

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