Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/10/2006, 14h17   #1
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Par défaut fonction RETURNS SETOF RECORD et count(): erreur

Bonjour, je voudrais faire une fonction qui renvoie le résultat d'un count() tout simple sur une table :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
CREATE FUNCTION hs_data_get_hs_new_count_from_old(INTEGER) RETURNS SETOF RECORD AS '
        DECLARE
         unigene ALIAS FOR $1;
         rec RECORD;
        BEGIN
         FOR rec IN SELECT COUNT(hs_new), hs_old FROM hs_l GROUP BY hs_old HAVING hs_old = unigene
         LOOP 
          RETURN NEXT rec;
         END LOOP;
          RETURN;
        END;
         ' LANGUAGE 'PLPGSQL';
Puis j'effectue un select sur la fonction :

select * from hs_data_get_hs_new_count_from_old('278468') as (compt int, uni int);

Mais là j'ai une erreur :
ERREUR: wrong record type supplied in RETURN NEXT
CONTEXT: PL/pgSQL function "hs_data_get_hs_new_count_from_old" line 7 at return next

Est-ce que vous verriez où peut bien être le vice ?

En vous remerciant,

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 14h39   #2
Xo
Expert Confirmé
 
Avatar de Xo
 
Inscription : janvier 2005
Messages : 2 701
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2005
Messages : 2 701
Points : 3 237
Points : 3 237
Envoyer un message via Skype™ à Xo
ta fonction accepte un argument de type integer, et tu lui passes une chaîne de caractère : essaye sans quotes autour de ta valeur (278468)
__________________
"Ce que l'on conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément." Nicolas Boileau

"Expliquer empêche de comprendre si cela dispense de chercher"

Quiz Oracle : venez tester vos connaissances !

La FAQ Oracle : 138 réponses à vos questions
Aidez-nous à la compléter
Xo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 14h51   #3
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Bonjour,

En fait j'avais déjà essayé et ça ne change rien. Par expérience, j'ai l'impression qu'il y a un cast implicite de toute manière lorsque l'argument est un int et qu'on saisi un 'int'.

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 15h39   #4
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Bon, j'ai trouvé la solution (qui est toute bête) après moultes recherches :

Code :
SELECT * FROM hs_data_get_hs_new_count_from_old(278468) AS (compteur bigint, unigene int);
count() renvoie un bigint et non un int...

Xo: après re-test, '278468' fonctionne bien dans tous les cas de figure sur un int en argument.

Bonne journée,

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h37.


 
 
 
 
Partenaires

Hébergement Web