そもそもストアドプロシージャに一時テーブルを作成したいのはなぜですか?
他のデータベース(SQL ServerやMySQLなど)に一時テーブルを作成することは比較的一般的です。 Oracleで同じことを行うことは非常にまれです。 Oracleで一時テーブルを作成したい場合は、ほとんどすべての場合に、より優れたアーキテクチャアプローチがあります。 DBAスタックには、一時テーブルの代替 そして、なぜそれらがOracleで一般的に必要とされないのか。
プログラムで、動的SQLを使用してオブジェクトを作成できます
CREATE OR REPLACE PROCEDURE dont_do_this
AS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE a( id INTEGER )';
END;
ただし、一時テーブルを動的に作成する場合は、そのテーブルへのすべての参照も動的SQLを介して行う必要があります。単純なSELECT
を記述することはできません。 テーブルに対するステートメント。また、Oracleの一時テーブルの定義はグローバルであるため、すべてのセッションで表示されます。 2つの異なるセッションが両方とも同じテーブルを作成しようとしている場合、2番目のセッションはエラーになります。異なるセッションでテーブルの定義が異なると予想される場合は、さらに多くの問題が発生します。