1

同じセッションの手順で一時テーブルを削除する方法。

Postgres Sql の一時テーブルに関する問題に直面しているためです。2 つの手順の場合:

A() には temp(id, name) という一時テーブルがあります B() には temp(id, name, address) という一時テーブルがあり、プロシージャ A が最初に呼び出され、その後にプロシージャ B が呼び出された場合、一時テーブルは残ります。プロシージャ A で定義された構造体、つまり temp(id, name) を使用し、プロシージャ B で定義された列「アドレス」が見つかりません。

4

2 に答える 2

0

一時テーブルはセッション スコープです。つまり、同じセッションがプロシージャ呼び出しと SQL 呼び出しにわたってそれを見ることができます。基本的に、一時テーブルはセッションに対してグローバルです。

したがって、AがBを呼び出すと仮定すると、オプションは次のようになります。

  1. プロシージャ A を呼び出し、A 内に一時テーブルを作成し、必要な処理を行います。手順 A の最後に、一時テーブルを削除します。A から B を呼び出すと、B 内に同じ名前の一時テーブルを作成して利用できるようになります。良い習慣として、使い終わったら一時テーブルを明示的に削除してください。

  2. それ以外の場合は、一時テーブルに 2 つの異なる名前を使用します。

http://www.postgresql.org/docs/9.2/static/sql-createtable.html "TEMPORARY または TEMP 指定した場合、テーブルは一時テーブルとして作成されます。一時テーブルはセッションの終了時に自動的に削除されます。または、オプションで、現在のトランザクションの最後に (以下の ON COMMIT を参照してください。) 一時テーブルが存在する間、同じ名前の既存の永続テーブルは、スキーマ修飾名で参照されない限り、現在のセッションには表示されません。一時テーブルも自動的に一時的です。」

于 2013-05-23T04:41:27.490 に答える