Re: How to return more than one row of data from a function in PL/pgSQL

Поиск
Список
Период
Сортировка
От Andrew G. Hammond
Тема Re: How to return more than one row of data from a function in PL/pgSQL
Дата
Msg-id E167Am8-0003kV-00@xyzzy.lan.internal
обсуждение исходный текст
Ответ на How to return more than one row of data from a function in PL/pgSQL  (dinocherian@yahoo.com (dino ck))
Ответы Re: How to return more than one row of data from a function in PL/pgSQL  (Dino Cherian <inimss@yahoo.com>)
Список pgsql-sql
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 2001 November 19 04:22 am, dino ck wrote:
> Hi,
>
> Is there a way to return more than one row of data from a function in
> PL/pgSQL?
>
> Anybody please help me with an example or a good resource on the net.

I don't know exactly what you're trying to achieve, BUT, you might want to try
a temporary table or even something like this...

- -- initialize
DROP SEQUENCE multi_marker; DROP TABLE multi_results, foo; DROP FUNCTION multi_return(text);
- -- create
CREATE TABLE foo(data TEXT NOT NULL);
CREATE SEQUENCE multi_marker;
CREATE TABLE multi_results(r_id INTEGER NOT NULL, data TEXT NOT NULL);
CREATE FUNCTION multi_return(text) RETURNS INTEGER AS ' DECLARE r_idx INTEGER;   ins_1 CONSTANT TEXT := ''INSERT INTO
multi_results(r_id, data) SELECT '';   ins_2 CONSTANT TEXT:= '', data || ''''_add'''' FROM foo WHERE '';   where_clause
ALIASFOR $1;   ins_final TEXT; BEGIN  r_idx := nextval(''multi_marker'');   ins_final := ins_1 || r_idx || ins_2 ||
where_clause;  RAISE NOTICE ''executing: %'', ins_final;   EXECUTE ins_final;   RETURN r_idx; END;' LANGUAGE
'plpgsql';
- -- populate
INSERT INTO foo VALUES (''); INSERT INTO foo VALUES ('a'); INSERT INTO foo VALUES ('b');
- -- usage
BEGIN;
SELECT multi_return('length(data) > 0'::text);   -- returns an index, ie 1
SELECT data FROM multi_results WHERE r_id = 1;         -- get results
DELETE FROM multi_results WHERE r_id = 1;             -- cleanup.
COMMIT;

- -- 
Andrew G. Hammond     mailto:drew@xyzzy.dhs.org   http://xyzzy.dhs.org/~drew/
56 2A 54 EF 19 C0 3B 43 72 69 5B E3 69 5B A1 1F                  613-389-5481
5CD3 62B0 254B DEB1 86E0  8959 093E F70A B457 84B1
"To blow recursion you must first blow recur" -- me
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iEYEARECAAYFAjv9+tUACgkQCT73CrRXhLHGDACeMgpWfE8O1fHOkO7kFuNLNDvd
7XoAn10pv/9enQ9NyetvUp5s32iP3uO8
=57Z4
-----END PGP SIGNATURE-----


В списке pgsql-sql по дате отправления:

Предыдущее
От: Andriy Pyrozhenko
Дата:
Сообщение: Re: Question
Следующее
От: "Christopher Kings-Lynne"
Дата:
Сообщение: Re: Question