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
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 |