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
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 |