From: | "David Johnston" <polobo(at)yahoo(dot)com> |
---|---|
To: | "'Chris McDonald'" <chrisjonmcdonald(at)gmail(dot)com>, <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: stored procedure multiple call call question |
Date: | 2012-10-02 21:37:40 |
Message-ID: | 01cd01cda0e6$261c17f0$725447d0$@yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
> If I had a single table targ to insert into I would do an
>
> INSERT INTO targ SELECT thiscol, thatcol, theothercol FROM FOO.
>
> The problem is that I have tables targ1, targ2, targn to insert things
into and a
> nice stored procedure myproc which does the insertion into all 3 tables -
> problem is that I dont see how I can effectively do
>
> INSERT INTO myproc SELECT thiscol, thatcol, theothercol FROM FOO.
>
> The only way I can work out how to do this is with another stored
procedure
> which allows me to do:
>
> FOR rec IN SELECT thiscol, thatcol, theothercol
> FROM FOO
> LOOP
> PERFORM myproc(rec.thiscol, rec.thatcol, rec.theothercol);
> END LOOP;
>
> But is there a way to do this just in SQL only without resorting to
plpgsql or a
> language like C/Java?
>
> thanks
>
SELECT myproc(thiscol, thatcol, theothercol) FROM FOO
If you want to use (and explode) the return value of "myproc" you will have
to do:
WITH func_exec AS (
SELECT myproc(thiscol, thatcol, theothercol) FROM FOO
)
SELECT (func_exec.myproc).*
FROM func_exec;
If you do:
SELECT myproc(thiscol, thatcol, theothercol).* FROM FOO
The "myproc" function will be executed one time for every output *column*
defined; which is likely to cause the statement to fail (since you'd be
inserting the same exact data multiple times).
David J.
From | Date | Subject | |
---|---|---|---|
Next Message | Martijn van Oosterhout | 2012-10-02 21:50:28 | Re: pg_typeof equivalent for numeric scale, numeric/timestamp precision? |
Previous Message | Martijn van Oosterhout | 2012-10-02 21:33:31 | Re: Thousands of schemas and ANALYZE goes out of memory |