sql >> データベース >  >> RDS >> Mysql

OracleのMySQL一時テーブルの代替

    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で一時テーブルが本当に必要になった回数を数えることができます。



    1. Mysql、データをロング/トールからワイドに再形成

    2. UNION内でのORDERBYの使用方法

    3. 無向グラフのすべての接続されたサブグラフを見つける方法

    4. 5プロジェクト開発中のMySqlの有用なクエリ