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

oracle11gでパラメータ化されたビューを作成する

    コンテキストメソッドの説明は次のとおりです:http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm

    例えば(上記のリンクから採用された例)

    CREATE CONTEXT dates_ctx USING set_dates_ctx_pkg;
    
    CREATE OR REPLACE PACKAGE set_dates_ctx_pkg IS 
      PROCEDURE set(d1 in date, d2 in date); 
    END; 
    /
    
    CREATE OR REPLACE PACKAGE BODY set_dates_ctx_pkg IS
      PROCEDURE set(d1 in date, d2 in date) IS 
      BEGIN 
        DBMS_SESSION.SET_CONTEXT('dates_ctx', 'd1', TO_CHAR(d1,'DD-MON-YYYY'));
        DBMS_SESSION.SET_CONTEXT('dates_ctx', 'd2', TO_CHAR(d2,'DD-MON-YYYY'));
      END;
    END;
    /
    

    次に、アプリケーションの日付を次のように設定します。

    BEGIN set_dates_ctx_pkg.set(mydate1, mydate2); END;
    /
    

    次に、次のコマンドでパラメータをクエリします:

    SELECT bla FROM mytable
    WHERE mydate
      BETWEEN TO_DATE(
                SYS_CONTEXT('dates_ctx', 'd1')
              ,'DD-MON-YYYY')
          AND TO_DATE(
                SYS_CONTEXT('dates_ctx', 'd2')
              ,'DD-MON-YYYY');
    

    このアプローチの利点は、クエリに非常に適していることです。実行時にDDLやDMLが含まれないため、心配する必要のあるトランザクションはありません。 SQL-PL / SQLコンテキストスイッチが含まれていないため、非常に高速です。

    または:

    コンテキストメソッドとJohnのパッケージ変数メソッドが使用できない場合、もう1つは、パラメーターをテーブル(たとえば、同じセッションでクエリを実行している場合はグローバル一時テーブル)に挿入してから、そのテーブルに結合することです。ビューから。欠点は、クエリを実行するときはいつでも、パラメータを挿入するためにDMLを実行する必要があることです。



    1. MariaDB JSON_MERGE_PRESERVE()の説明

    2. byte []をC#からSQLServerデータベースに保存します

    3. TYPE_NAME()を使用して、SQLServerのデータ型の名前を取得します

    4. CMONHAを使用したClusterControlノードの高可用性構成