PL/pgSQLには2つの関数があります。
関数1は関数2を呼び出し、関数2は関数1で作成された一時テーブルを処理する必要があります。つまり、この一時テーブルは関数1コンテキスト(関数2が内部にある)でグローバルである必要があります。
FUNCTION1
| CREATE TEMPORARY TABLE
| DO SOME SPECIFIC STUFF...
| FUNCTION2
| DO SOME GENERIC STUFF
| INSERT SOME DATA INTO THE TEMPORARY TABLE
| (Uhh!! Ohh! it hurts, table not visible)
| RAISED ON ERROR
関数1で作成された一時テーブルをこのサブ関数に渡す方法はありますか?
すべてのビッグデータを挿入する前に、一時テーブル内の多くのデータを処理する非常に大きな関数を使用しているので、それが必要ですが、よりモジュール化されたフォームに変換しようとすると、サブ関数は、一時テーブル)。
それは今では機能していますが(大きな1つの関数で)、CTRL + C CTRL + Vを実行して新しい類似の関数を作成しています。多くのコードをその中で繰り返すことができるためです。サブ関数を使用できる場合、このコードを複数回使用できるため、この問題は発生しません。
テーブルの名前を渡すことができます:
create or replace function f2(p_table_name text) returns text
language plpgsql
as
$body$
begin
execute $$insert into $$||quote_ident(p_table_name)||$$ (c1) values ('text1');$$;
return 'ok';
end;
$body$;
create or replace function f1() returns text
language plpgsql
as
$body$
declare
v1 text;
begin
create temporary table t1 (
c1 text
);
perform f2('t1');
select c1 into v1 from t1 limit 1;
return v1;
end;
$body$;
select f1();
それが動作するのを見てください: http://rextester.com/FYMX28296