Re: SETOF come ritorno delle funzioni

From: Vincent Veyron <vv(dot)lists(at)wanadoo(dot)fr>
To: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
Cc: Piviul <piviul(at)riminilug(dot)it>, pgsql-general(at)postgresql(dot)org
Subject: Re: SETOF come ritorno delle funzioni
Date: 2012-12-04 13:26:14
Message-ID: 1354627574.2424.8.camel@asus-1001PX.home
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)riminilug(dot)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(at)postgresql(dot)org)
> > To make changes to your subscription:
> > http://www.postgresql.org/mailpref/pgsql-general
>
>

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

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Edson Richter 2012-12-04 13:44:20 Which is faster: char(14) or varchar(14)
Previous Message Jasen Betts 2012-12-04 10:16:50 Re: Set returning functions in the SELECT list