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

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search for
  Advanced Search

Re: récupérer le type


  • From: dforums <dforums(at)vieonet(dot)com>
  • To: Paul Mackay <mackaypaul(at)gmail(dot)com>
  • Cc: pgsql-fr-generale(at)postgresql(dot)org
  • Subject: Re: récupérer le type
  • Date: Sun, 05 Feb 2006 17:24:04 +0100
  • Message-id: <43E626A4(dot)8000404(at)vieonet(dot)com>

Bonjour

non en faite c pas ça.

voila un autre exemple :
CREATE OR REPLACE FUNCTION func_exec (text) RETURNS integer AS $$
DECLARE
in_table ALIAS FOR $1;
rec RECORD;

BEGIN
  EXECUTE 'SELECT * FROM ' || in_table || ' WHERE id=1' INTO rec;
--et c la que ça ce complique comment faire pour ?

EXECUTE 'select * FROM othertable where other_id=rec.????_id';

END;
$$ LANGUAGE plpgsql;

Maintenant j'espère que c plus simple. Comment je fait pour récupérer le nom du champ(les ?), qui peut varier d'une table à l'autre.

C'est super urgent et important, pour moi, merci.

David


On 2/4/06, *dforums* <dforums(at)vieonet(dot)com <mailto:dforums(at)vieonet(dot)com>> wrote:

   Bonjour

   J'aurais besoin de récupérer le type d'une table passé en paramétre
   d'une procédure, et je ne sais pas comment m'y prendre.

   create function (VARCHAR) ....
   declare
   in_table ALIAS FOR $1;

   tableType in_table%ROWTYPE;

   Begin
   SELCT INTO tableType ...
   END;
...



Paul Mackay a écrit :
David,

Si je comprends bien, tu souhaites récupérer un enregistrement d'une table dont le nom est passé en paramètre. Cela peut se faire en combinant l'utilisation du type RECORD et de la commande EXECUTE. Celle-ci permet d'exécuter des requêtes dynamiques. On ne peut y exécuter un SELECT INTO, il faut plutôt utiliser la clause INTO de EXECUTE. (cf. http://www.postgresql.org/docs/8.1/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN ).

Voici un exemple d'une fonction de ce genre. Cette fonction reçoit un nom de table en paramètre. Cette table doit avoir un champ "id" de type int (ou compatible) et avoir une colonne oid. La fonction retourne le oid de l'enregistrement dont l'id est égale à 1 (celui-ci pourrait passé en paramètre bien sûr).

CREATE OR REPLACE FUNCTION func_exec (text) RETURNS integer AS $$
DECLARE
in_table ALIAS FOR $1;
rec RECORD;

BEGIN
   EXECUTE 'SELECT * FROM ' || in_table || ' WHERE id=1' INTO rec;

   RETURN rec.oid;

END;
$$ LANGUAGE plpgsql;

A+,
Paul

On 2/4/06, *dforums* <dforums(at)vieonet(dot)com <mailto:dforums(at)vieonet(dot)com>> wrote:

    Bonjour

    J'aurais besoin de récupérer le type d'une table passé en paramétre
    d'une procédure, et je ne sais pas comment m'y prendre.

    create function (VARCHAR) ....
    declare
    in_table ALIAS FOR $1;

    tableType in_table%ROWTYPE;

    Begin
    SELCT INTO tableType ...
    END;
    ...

    voila ce que j'aimerais arrivé a faire.

    Pour information complémentaire je souhaite pouvoir appeller cette
    procedure d'un script externe ou d'une autre procedure.

    cordialement

    david

    ---------------------------(end of
    broadcast)---------------------------
    TIP 4: Have you searched our list archives?

                   http://archives.postgresql.org





Home | Main Index | Thread Index

Privacy Policy | PostgreSQL Archives hosted by Command Prompt, Inc. | Designed by tinysofa
Copyright © 1996 – 2008 PostgreSQL Global Development Group