Oracle データベースでは、ストアド プロシージャは、入力パラメータを受け取り、出力値を返すことができる、事前定義された SQL ステートメントのセットです。これらは、特定のタスクを実行するために使用され、通常は Oracle データベースのパフォーマンスと保守性を向上させ、ビジネス ロジックとの緊密な統合を実現します。
一時テーブルは、クエリ プロセス中に使用される一時的な記憶領域です。 Oracle データベースでは、CREATE GLOBAL TEMPORARY TABLE ステートメントを使用して一時テーブルを作成できます。このようなテーブルはセッションの終了時に自動的に削除され、単一セッション内の複数のクエリの中間結果として使用できます。
過去数年にわたり、ストアド プロシージャと一時テーブルの組み合わせは、効率的で複雑なクエリを実行するためのベスト プラクティスの 1 つになりました。たとえば、大規模なデータ ウェアハウスでは、ストアド プロシージャと一時テーブルを使用して複雑な ETL (抽出、変換、ロード) 操作を実装でき、パフォーマンスと保守性の点で優れたパフォーマンスを実現できます。
この記事では、Oracle データベースに一時テーブルを作成し、ストアド プロシージャでそれを使用する方法を紹介します。
一時テーブルの作成
Oracle データベースに一時テーブルを作成するには、次の CREATE GLOBAL TEMPORARY TABLE ステートメントを使用できます:
CREATE GLOBAL TEMPORARY TABLE temp_table_name ( column_name1 datatype1, column_name2 datatype2, column_name3 datatype3, ... ) ON COMMIT DELETE ROWS;
このステートメント内:
temp_table_name
は、作成する一時テーブルの名前です。column_name
はテーブル内の列名です。複数の列を定義できます。datatype
は、各列のデータ型です。このステートメントのON COMMIT DELETE ROWS
は、トランザクションがコミットされるかセッションが閉じられるときに、一時テーブル内のすべての行を削除することを意味することに注意してください。これにより、各セッションで空のテーブルが使用され、セッションの終了時にシステム リソースが解放されます。
一時テーブルの使用
一時テーブルを作成したら、ストアド プロシージャでそれを使用できます。たとえば、ストアド プロシージャで中間結果セットを定義する必要がある場合は、次の手順を使用できます。
CREATE OR REPLACE PROCEDURE my_procedure IS BEGIN CREATE GLOBAL TEMPORARY TABLE temp_table ( col1 NUMBER, col2 VARCHAR2(20) ) ON COMMIT DELETE ROWS; END my_procedure;
この例では、ストアド プロシージャでtemp_table
という名前の一時テーブルを定義し、col1
とcol2
という 2 つの列を含め、を使用しました。 ON COMMIT DELETE ROWS
オプションを使用して定義します。
CREATE OR REPLACE PROCEDURE my_procedure IS BEGIN CREATE GLOBAL TEMPORARY TABLE temp_table ( col1 NUMBER, col2 VARCHAR2(20) ) ON COMMIT DELETE ROWS; INSERT INTO temp_table (col1, col2) VALUES (1, 'Hello'); INSERT INTO temp_table (col1, col2) VALUES (2, 'World'); COMMIT; END my_procedure;
この例では、2 行のデータを一時テーブルに挿入しました。 Oracle データベース内の一時テーブルはトランザクションがコミットされた場合にのみ使用できるため、ここでのCOMMIT
ステートメントは必須であることに注意してください。
CREATE OR REPLACE PROCEDURE my_procedure IS cur1 SYS_REFCURSOR; BEGIN CREATE GLOBAL TEMPORARY TABLE temp_table ( col1 NUMBER, col2 VARCHAR2(20) ) ON COMMIT DELETE ROWS; INSERT INTO temp_table (col1, col2) VALUES (1, 'Hello'); INSERT INTO temp_table (col1, col2) VALUES (2, 'World'); COMMIT; OPEN cur1 FOR SELECT * FROM temp_table; -- Use the result set -- ... END my_procedure;
この例では、SYS_REFCURSOR
データ型を使用して結果セット ポインターを宣言しました。 。次に、ストアド プロシージャでカーソルを開き、SELECT
ステートメントを使用して一時テーブルからデータを取得し、ストアド プロシージャを呼び出したプログラムに結果セットを返しました。この後は、結果セットを他のカーソルと同様に使用できます。
結論
Oracle データベースでは、ストアド プロシージャと一時テーブルが複雑なクエリを実行するためのベスト プラクティスとなっています。一時テーブルをストアド プロシージャと組み合わせて使用すると、クエリのパフォーマンスと保守性が大幅に向上し、ビジネス ロジックとの緊密な統合が実現します。実際のアプリケーションでは、一時テーブルとストアド プロシージャを慎重に設計し、ニーズを確実に満たせるようにすることをお勧めします。
以上がOracle ストアド プロシージャの一時テーブルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。