How Does TEMP Table Work In Plpgsql? - Mailing list pgsql-general

From
Subject How Does TEMP Table Work In Plpgsql?
Date
Msg-id 200109040307.0523@lh00.opsion.fr
Whole thread Raw
Responses Re: How Does TEMP Table Work In Plpgsql?
List pgsql-general
Hi!

I am trying to create a function returning 2 values
using temporary table as "media":

database1=# CREATE function f2values(numeric,numeric)
returns bool as '
database1'# begin
database1'#   if $1 >= 1 then
database1'#     create temp table mytemp(a numeric,b
numeric);
database1'#     insert into mytemp values
($1+1,$2+5);
database1'#     return 1;
database1'#   else
database1'#     return 0;
database1'#   end if;
database1'# end;' language 'plpgsql';
CREATE
database1=# CREATE function test() returns bool as '
database1'# declare
database1'#   r1 numeric;
database1'#   r2 numeric;
database1'# begin
database1'#  if f2values(1,1) then
database1'#    select a,b into r1,r2 from mytemp;
database1'#    raise notice ''%,%'',r1,r2;
database1'#    drop table mytemp;
database1'#  else
database1'#    return 0;
database1'#  end if;
database1'#  return 1;
database1'# end;' language 'plpgsql';
CREATE

Now do the test:

database1=# select test();
NOTICE:  2.000000,6.000000
 test
------
 t
(1 row)

database1=# select test();
ERROR:  Relation 782255 does not exist
database1=#

Now try a more simple one:

database1=# CREATE function test2(numeric,numeric)
returns bool as '
database1'# declare
database1'#   r1 numeric;
database1'#   r2 numeric;
database1'# begin
database1'#     create temp table mytemp(a numeric,b
numeric);
database1'#     insert into mytemp values
($1+1,$2+5);
database1'#     select a,b into r1,r2 from mytemp;
database1'#     raise notice ''%,%'',r1,r2;
database1'#     drop table mytemp;
database1'#     return 1;
database1'# end;' language 'plpgsql';
CREATE
database1=# select test2(1,1);
NOTICE:  2.000000,6.000000
 test2
-------
 t
(1 row)

database1=# select test2(1,1);
ERROR:  Relation 782230 does not exist
database1=#

Weid is that test2 and test work only once per psql
connection (i.e. "session", am I correct?).
Can anyone help?

Thanks!

CN

--------------------------------------------------------
You too can have your own email address from Eurosport.
http://www.eurosport.com






pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: ERROR: int8 conversion to int4 is out of range
Next
From: Sean Chittenden
Date:
Subject: Re: Crash in vacuum analyze