On Thu, 11 Jul 2002 pgsql-bugs@postgresql.org wrote:
> CNLIOU (cnliou@eurosport.com) reports a bug with a severity of 2
> The lower the number the more severe it is.
>
> Short Description
> Fail To Create/Drop Temporary Table IN PL/PGSQL
>
> Long Description
> Hi!
>
> In TODO list, it reads in sub section
>
> "Fix problems with complex temporary table creation/destruction
> without using PL/PgSQL EXECUTE, needs cache prevention/invalidation"
>
> in section "SERVER-SIDE LANGUAGES".
>
> According to this statement, I am in the impression that I can
> create/destruct temporary table with "execute" statement, but actually
> I can't.
>
> Perhaps this can be added to TODO list, too.
>
> Also, being unable to use temporary table in PL/PGSQL, I can not
> proceed working on part of my project.
You need to use EXECUTE on all statements dealing with the table
you are creating and dropping, but there is an issue that I don't
know of a direct way to select into a field with EXECUTE apart from
what I do below.
CREATE OR REPLACE FUNCTION test() RETURNS BOOLEAN AS '
DECLARE
n INTEGER;
r RECORD;
BEGIN
EXECUTE ''CREATE TEMP TABLE temp1 (MyField INTEGER)'';
EXECUTE ''INSERT INTO temp1 VALUES(8);'';
FOR r IN EXECUTE ''SELECT MyField FROM temp1 LIMIT 1'' LOOP
n := r.MyField;
END LOOP;
RAISE NOTICE ''%'',n;
EXECUTE ''DROP TABLE temp1'';
RETURN TRUE;
END;' LANGUAGE 'plpgsql';