Re: Colonne inéxistante

Lists: pgsql-fr-generale
From: Gautier Di Folco <xgx26xdf(at)hotmail(dot)com>
To: <pgsql-fr-generale(at)postgresql(dot)org>
Subject: Colonne inéxistante
Date: 2008-12-13 13:41:48
Message-ID: BAY127-W18F6AAFF76B72FC3518C51D6F60@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-fr-generale


Bonjour, je suis nouveau, je suis entrain de tester une fonction PL/pgsql, et lorsque je la teste, j'ai le droit à ce message d'erreur :
ERREUR: row "droits" has no field "fk_membre"CONTEXTE : compile of PL/pgSQL function "obtenir_droits" near line 11
********** Erreur **********
ERREUR: row "droits" has no field "fk_membre"État SQL :42703Contexte : compile of PL/pgSQL function "obtenir_droits" near line 11

Que faire sâchant que ma fonction est :
CREATE OR REPLACE FUNCTION obtenir_droits(IN _fk_groupe integer, IN _fk_membre integer, OUT nb_profil integer, OUT droits profil) RETURNS RECORD AS$BODY$DECLARE test1 RECORD; test2 RECORD;BEGIN--... (un IF et un SELECT, juste) SELECT COUNT(profil.*) nb_droits INTO test1 FROM droits, profil-- ligne 11 WHERE droits.fk_membre=_fk_membre AND profil.fk_groupe=_fk_groupe AND profil.pk_profil=droits.fk_profil;
--...
END;$BODY$LANGUAGE 'plpgsql' VOLATILE;

CREATE TABLE droits( pk_droit serial, fk_membre integer, fk_profile integer, CONSTRAINT comm_r_droits_pkey PRIMARY KEY (pk_droit));

Par avance merci de votre aide
_________________________________________________________________
Téléphonez gratuitement à tous vos proches avec Windows Live Messenger  !  Téléchargez-le maintenant !
http://www.windowslive.fr/messenger/1.asp


From: Marc Cousin <cousinmarc(at)gmail(dot)com>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: Colonne inéxistante
Date: 2008-12-13 15:49:33
Message-ID: 200812131649.33920.cousinmarc@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-fr-generale

Le Saturday 13 December 2008 14:41:48 Gautier Di Folco, vous avez écrit :
> Bonjour, je suis nouveau, je suis entrain de tester une fonction PL/pgsql,
> et lorsque je la teste, j'ai le droit à ce message d'erreur : ERREUR: row
> "droits" has no field "fk_membre"CONTEXTE : compile of PL/pgSQL function
> "obtenir_droits" near line 11 ********** Erreur **********
> ERREUR: row "droits" has no field "fk_membre"État SQL :42703Contexte :
> compile of PL/pgSQL function "obtenir_droits" near line 11
>
> Que faire sâchant que ma fonction est :
> CREATE OR REPLACE FUNCTION obtenir_droits(IN _fk_groupe integer, IN
> _fk_membre integer, OUT nb_profil integer, OUT droits profil) RETURNS
> RECORD AS$BODY$DECLARE test1 RECORD; test2 RECORD;BEGIN--... (un IF et un
> SELECT, juste) SELECT COUNT(profil.*) nb_droits INTO test1 FROM droits,
> profil-- ligne 11 WHERE droits.fk_membre=_fk_membre AND
> profil.fk_groupe=_fk_groupe AND profil.pk_profil=droits.fk_profil; --...
> END;$BODY$LANGUAGE 'plpgsql' VOLATILE;
>
> CREATE TABLE droits( pk_droit serial, fk_membre integer, fk_profile
> integer, CONSTRAINT comm_r_droits_pkey PRIMARY KEY (pk_droit));

A ce que je comprends de la déclaration de ta fonction ( OUT droits profil),
tu déclares "droit" comme étant une variable de type 'profil'.
Aucune idée si cela existe dans ta base, mais probablement pas ... d'ou ton
erreur (la variable "droit" doit être prioritaire sur la table "droit" dans
l'interprétation de la clause profil.pk_profil=droits.fk_profil )


From: Gautier Di Folco <xgx26xdf(at)hotmail(dot)com>
To: <pgsql-fr-generale(at)postgresql(dot)org>
Subject: RE: Colonne inéxistante
Date: 2008-12-13 16:02:14
Message-ID: BAY125-W333E98E23252DFC44C4D24D6F60@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-fr-generale


Le problème, c'est que lorsque je met un type RECORD pour cet argument j'ai le droit à ça :ERREUR: plpgsql functions cannot take type record********** Erreur **********ERREUR: plpgsql functions cannot take type recordÉtat SQL :0A000Donc je sais pas quoi faire :/ Par avance merci de votre aide> From: cousinmarc(at)gmail(dot)com> To: pgsql-fr-generale(at)postgresql(dot)org> Subject: Re: [pgsql-fr-generale] Colonne inéxistante> Date: Sat, 13 Dec 2008 16:49:33 +0100> > Le Saturday 13 December 2008 14:41:48 Gautier Di Folco, vous avez écrit :> > Bonjour, je suis nouveau, je suis entrain de tester une fonction PL/pgsql,> > et lorsque je la teste, j'ai le droit à ce message d'erreur : ERREUR: row> > "droits" has no field "fk_membre"CONTEXTE : compile of PL/pgSQL function> > "obtenir_droits" near line 11 ********** Erreur **********> > ERREUR: row "droits" has no field "fk_membre"État SQL :42703Contexte :> > compile of PL/pgSQL function "obtenir_droits" near line 11> >> > Que faire sâchant que ma fonction est :> > CREATE OR REPLACE FUNCTION obtenir_droits(IN _fk_groupe integer, IN> > _fk_membre integer, OUT nb_profil integer, OUT droits profil) RETURNS> > RECORD AS$BODY$DECLARE test1 RECORD; test2 RECORD;BEGIN--... (un IF et un> > SELECT, juste) SELECT COUNT(profil.*) nb_droits INTO test1 FROM droits, > > profil-- ligne 11 WHERE droits.fk_membre=_fk_membre AND> > profil.fk_groupe=_fk_groupe AND profil.pk_profil=droits.fk_profil; --...> > END;$BODY$LANGUAGE 'plpgsql' VOLATILE;> >> > CREATE TABLE droits( pk_droit serial, fk_membre integer, fk_profile> > integer, CONSTRAINT comm_r_droits_pkey PRIMARY KEY (pk_droit));> > A ce que je comprends de la déclaration de ta fonction ( OUT droits profil), > tu déclares "droit" comme étant une variable de type 'profil'.> Aucune idée si cela existe dans ta base, mais probablement pas ... d'ou ton > erreur (la variable "droit" doit être prioritaire sur la table "droit" dans > l'interprétation de la clause profil.pk_profil=droits.fk_profil )> > -- > Sent via pgsql-fr-generale mailing list (pgsql-fr-generale(at)postgresql(dot)org)> To make changes to your subscription:> http://www.postgresql.org/mailpref/pgsql-fr-generale
_________________________________________________________________
Téléphonez gratuitement à tous vos proches avec Windows Live Messenger  !  Téléchargez-le maintenant !
http://www.windowslive.fr/messenger/1.asp


From: Marc Cousin <cousinmarc(at)gmail(dot)com>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: Colonne inéxistante
Date: 2008-12-13 17:05:59
Message-ID: 200812131806.00021.cousinmarc@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-fr-generale

Le plus simple, je pense, c'est de créer un nouveau type pour les droits à
retourner... comme je ne sais pas quels sont les champs, je ne peux pas te
donner la syntaxe exacte, mais c'est quelque chose comme

create type droit as (droit1 text, droit2 int);

ou tu donnes la liste des champs qui composent un type 'droit'

Ce type peut alors être utilisé comme type de retour de la fonction.


From: "Daniel Verite" <daniel(at)manitou-mail(dot)org>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: Colonne inéxistante
Date: 2008-12-13 17:43:24
Message-ID: Postg젠 토토SQL : 젠 토토 : Colonne inéxistante
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-fr-generale

Gautier Di Folco wrote:

> Le problème, c'est que lorsque je met un type RECORD ...

Je n'ai pas compris la suite du fil de discussion, mais si dans le bout
de déclaration
OUT droits profil
"droits" est une variable du type d'un enregistrement de la table
"profil", alors il faut simplement lui choisir un autre nom parce que
ça entre en conflit avec la table "droits" qui est référencée par
ailleurs à l'intérieur de la fonction.
C'est ce que dit Marc dans sa réponse sauf que moi je suppose que tu as
bien une table qui s'appelle "profil", sans quoi je n'ai rien compris
:)

--
Daniel
PostgreSQL-powered mail user agent and storage:
http://www.manitou-mail.org