Oracleでは、そもそも一時テーブルが必要になることはめったにありません。他のデータベースでは通常、一時テーブルが必要です。これらのデータベースはマルチバージョンの読み取り整合性を実装しておらず、プロシージャの実行中にテーブルからデータを読み取る人がブロックされたり、プロシージャの実行中にダーティ読み取りが行われたりする可能性があるためです。データを別の構造に保存しないでください。リーダーはライターをブロックせず、ダーティリードは不可能であるため、これらの理由のいずれかのためにOracleにグローバル一時テーブルは必要ありません。
PL / SQL計算の実行中にデータを格納するための一時的な場所が必要な場合は、Oracleの一時テーブルよりもPL/SQLコレクションが一般的に使用されます。このように、PL / SQLエンジンからSQLエンジンにデータを行き来させたり、PL/SQLエンジンにデータを戻したりすることはありません。
CREATE PROCEDURE do_some_processing
AS
TYPE emp_collection_typ IS TABLE OF emp%rowtype;
l_emps emp_collection_type;
CURSOR emp_cur
IS SELECT *
FROM emp;
BEGIN
OPEN emp_cur;
LOOP
FETCH emp_cur
BULK COLLECT INTO l_emps
LIMIT 100;
EXIT WHEN l_emps.count = 0;
FOR i IN 1 .. l_emps.count
LOOP
<<do some complicated processing>>
END LOOP;
END LOOP;
END;
(プロシージャの外部で)グローバル一時テーブルを作成し、他のテーブルを使用する場合と同じように、プロシージャ内でグローバル一時テーブルを使用できます。したがって、必要に応じて一時テーブルを引き続き使用できます。しかし、一方では、Oracleで一時テーブルが本当に必要になった回数を数えることができます。