From: | Richard Huxton <dev(at)archonet(dot)com> |
---|---|
To: | Charl Gerber <charlgerber(at)yahoo(dot)com> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Newbie: help with FUNCTION |
Date: | 2005-02-25 08:12:22 |
Message-ID: | 421EDDE6.9040308@archonet.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Charl Gerber wrote:
> I'm trying to create a function that takes 1
> paramater (eg an integer) as input, then does 5
> database updates or deletes in 5 different SQL
> statements and returns 5 integers (in one resultset)
> indicating how many rows were affected by the various
> updates/deletes.
>
> How do I do this?
>
> How can I specify the names of the 5 output colums?
Why not return 5 rows instead. That way you can extend it to 6 queries
easily.
CREATE TYPE num_rows_affected AS (
tbl_name text,
num_rows int4
);
CREATE FUNCTION do_stuff(int4) RETURNS SETOF num_rows_affected AS '
DECLARE
res num_rows_affected;
BEGIN
-- Do query 1 here
GET DIAGNOSTICS res.num_rows := ROW_COUNT;
res.tbl_name := ''table1'';
RETURN NEXT res;
-- Do query 2 here
GET DIAGNOSTICS res.num_rows := ROW_COUNT;
res.tbl_name := ''table1'';
RETURN NEXT res;
...etc...
RETURN;
END;
' LANGUAGE plpgsql;
SELECT * FROM do_stuff(123);
Full details in the plpgsql chapter of the manuals. None of the above is
tested for syntax errors. You can use block-quoting in version 8.0
--
Richard Huxton
Archonet Ltd
From | Date | Subject | |
---|---|---|---|
Next Message | Richard Huxton | 2005-02-25 08:26:00 | Re: Which query is less expensive / faster? |
Previous Message | Bruce Momjian | 2005-02-25 05:27:58 | Re: [PATCHES] A way to let Vacuum warn if FSM settings are low. |