2016-12-06 11 views
0

私はプロシージャ内にテンポラリテーブルを1つ作成し、そのプロシージャでそのテーブルを使用して、その 'SP'を実行した後で自動的にそのテーブルを削除したいのですが、どうすればいいですか?あなたがテーブルにテンポラリテーブルの作成

execute immediate 'drop table....

+0

check dynamic sql? – GurV

+2

このアプローチの代わりにグローバル一時テーブルを使用することをお勧めします。 GTT内のデータは、セッションに固有です。プロシージャの外部で一度だけテーブルを作成し、そのプロシージャで使用する必要があります。 https://oracle-base.com/articles/misc/temporary-tables –

+0

2つのセッションが同時にプロシージャを実行する場合はどうなりますか?テーブルを作成しようとする前にテーブルが存在するかどうかを確認するコードがありますか?他のセッションがそれを使用している可能性がある場合は、どうやって削除できるかをどのように知ることができますか?また、 'delete'または' drop'を意味しますか? –

答えて

0

あなたは動的SQLすることができます

execute immediate 'create table my_table (/* cols here */)'; 

と終わり:また

execute immediate 'drop table my_table'; 

言及する価値がテーブルとして直接、一時テーブルを使用すると、コンパイル時に存在していない一方で、あなたはコードをコンパイルすることはできません。動的SQLを使用するには、それを使用する必要があります。

0

あなたをドロップすることができますが、同じ方法でそれらのすべてのすべての後、あなたのSTAF

を行うことができます次に

Execute immediate 'create table...'

動的SQLを使用することができます

+0

私はなぜdownvoteしてくださいか分かりますか? – GurV

関連する問題