[pgsql-jp: 25451] PL/pgSQLで一時テーブルの作成、挿入、削除の問題

SATO Hiroyuki hiroyuki @ navitime.co.jp
2002年 3月 28日 (木) 12:33:12 JST


初めまして。佐藤博之と申します。

次のような現象で困っております。

PL/pgSQLの関数で、一時テーブルを作成し、作成したテーブルに行
を挿入し、作成したテーブルを削除しています。この関数を1回目
に実行したときは、正常に動作するのですが、2回目以降動作しま
せん。

実際に実現したいことは、一旦一時テーブルに動的SQLによる結果
を保存し、それを使って計算し、その結果を関数の返却値としたい
のです。

このような使用方法に問題があるのでしょうか?対応策など、アド
バイスいただけますと、ありがたいです。宜しくお願い致します。

実行環境は、
  Windows 2000
  Cygwin
  PostgreSQL 7.1.3-2
です。

テストしたソースと結果を下記に引用します。

(↓ここから:ソース↓)
create function test()
returns double precision as'
declare
--  val double precision;
  val float8;
begin

  create temp table test(value double precision);

  insert into test values(random());
  insert into test values(random());

  select into val sum(value)from test;

  drop table test;

  return val;

end;
' language 'plpgsql';
(↑ここまで:ソース↑)


(↓ここから:結果↓)
a=# select test();
       test       
------------------
 1.14721359226257
(1 row)

a=# select test();
ERROR:  Relation 1769051 does not exist
a=# select test();
ERROR:  Relation 1769051 does not exist
(↑ここまで:結果↑)



pgsql-jp メーリングリストの案内