Re: SETOF come ritorno delle funzioni - Mailing list pgsql-general

From Vincent Veyron
Subject Re: SETOF come ritorno delle funzioni
Date
Msg-id 1354627574.2424.8.camel@asus-1001PX.home
Whole thread Raw
In response to Re: SETOF come ritorno delle funzioni  (Pavel Stehule <pavel.stehule@gmail.com>)
List pgsql-general
Le lundi 03 décembre 2012 à 08:29 +0100, Pavel Stehule a écrit :
> Hello
>
> sorry, a used language in this mailing list is English language
>

You're right, of course, but I'll try and answer since I read a bit of
Italian.

Piviul, si deve scrivere in inglese qua, per ottenere delle risposte.


> 2012/11/30 Piviul <piviul@riminilug.it>:
> > Ciao a tutti, avrei bisogno di creare una funzione che restituisca un
> > insieme di record. Ho visto che è possibile fare restituire ad una
> > funzione una tabella di cui si definiscono i campi all'interno della
> > funzione stessa
> >
> > CREATE FUNCTION foo() RETURNS TABLE(id INT, foo TEXT)
> >
> > Poi nel corpo provo a costruirmi il record da restituire con RETURN NEXT
> > ma mi da un errore: RETURN NEXT non può avere un parametro in una
> > funzione con parametri OUT a o vicino "r" dove "r" è la variabile di
> > tipo record che vorrei accodare all'output.
> >

Se ho capito bene, basta usare questo :

CREATE OR REPLACE FUNCTION foo(text) RETURNS TABLE(id INT, nome TEXT, a
text) AS
$pippo$
       SELECT id, nome, $1
       FROM foo;
$pippo$ LANGUAGE sql;

select foo('a');

















> > Vorrei in altre parole fare una funzione tipo:
> >
> > CREATE OR REPLACE FUNCTION magazzino.foo()
> > RETURNS TABLE(id INT, nome TEXT) AS
> > $pippo$
> > DECLARE
> >    r RECORD;
> > BEGIN
> >     FOR r in
> >        SELECT id::int, nome::text
> >        FROM foo
> >     LOOP
> >         RETURN NEXT r;
> >     END LOOP;
> >     RETURN;
> > END;
> > $pippo$ LANGUAGE plpgsql;
> >
>
> there should be identifier collision - you cannot simply mix plpgsql
> variables and sql identifiers - so you have to use qualified
> identifiers - schema.name
>
> CREATE OR REPLACE FUNCTION magazzino.foo()
> RETURNS TABLE(id INT, nome TEXT) AS
> $pippo$
> BEGIN
>     FOR  id, nome in
>        SELECT foo.id::int, foo.nome::text
>        FROM foo
>     LOOP
>         RETURN NEXT;
>     END LOOP;
>     RETURN;
> END;
> $pippo$ LANGUAGE plpgsql;
>
> Regards
>
> Pavel Stehule
>
> > Cosa sbaglio?
> >
> > Piviul
> >
> >
> > --
> > Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> > To make changes to your subscription:
> > http://www.postgresql.org/mailpref/pgsql-general
>
>

--
Vincent Veyron
http://marica.fr
Logiciel pour département juridique



pgsql-general by date:

Previous
From: Jasen Betts
Date:
Subject: Re: Set returning functions in the SELECT list
Next
From: Edson Richter
Date:
Subject: Which is faster: char(14) or varchar(14)