データ移動の例

以下の基本ビューがあるとします。

  • JDBC データソース ds1 から作成した view_ds1

  • JDBC データソース ds2 から作成した view_ds2

  • JDBC データソース ds3 から作成した view_ds3

さらに、以下の派生ビューがあるとします。

CREATE VIEW dataMoveView AS
    SELECT view_ds1.id
    FROM view_ds1
        INNER JOIN view_ds2
        INNER JOIN view_ds3
        ON (view_ds1.id = view_ds2.id)
    CONTEXT( DATAMOVEMENTPLAN = view_ds2: JDBC ds1
                                view_ds3: JDBC ds1 );
CREATE VIEW p_dataMoveView AS
    SELECT *
    FROM dataMoveView
    CONTEXT( DATAMOVEMENTPLAN = view_ds2 : JDBC ds3 );
CREATE VIEW p_dataMoveView_j_view_ds2 AS
    SELECT *
    FROM p_dataMoveView a
    INNER JOIN view_ds2 b ON (a.id = b.id);
  • dataMoveView には、実行時に view_ds2 ビューと view_ds3 ビューのデータを、 ds1 データソースに作成したテーブルに挿入する動作が設定されています。

  • dataMoveView ビューに設定した、 view_ds2 ビューのデータ移動プランは、 p_dataMoveView によって無効にされます。 view_ds2 ビューのデータは、 ds1 ではなく、 ds3 データソースに移動します。

注釈

これらの例では、わかりやすくするために、VQL を使用してデータ移動を定義していますが、ビューの実際のデータ移動は、ビューの [Options] ダイアログにある [Execution plan] タブで定義することが推奨されます。

クエリ 1)

SELECT *
FROM dataMoveView

view_ds2view_ds3ds1 データソースに移動します。


クエリ 2)

SELECT *
FROM p_dataMoveView

view_ds2ds3 に、 view_ds3ds1 に、それぞれ移動します。


クエリ 3)

SELECT *
FROM p_dataMoveView
CONTEXT( DATAMOVEMENTPLAN = view_ds2: OFF )

view_ds3ds1 に移動します。このビューでは view_ds2ds3 に移動することを定義していますが、この移動はクエリの DATAMOVEMENTPLAN 句で OFF オプションによって無効になっています。


クエリ 4)

SELECT *
FROM p_dataMoveView_j_view_ds2
CONTEXT( DATAMOVEMENTPLAN = view_ds2: JDBC ds1 view_ds2: JDBC ds2 )

1 番目の分岐の view_ds2ds1 に、2 番目の分岐の view_ds2ds2 に、それぞれ移動します。 view_ds3ds1 に移動します。これらのデータの移動先は、ビューの定義で設定したデータソースではなく、 DATAMOVEMENTPLAN 句で設定したデータソースである点に注意してください。


クエリ 5)

SELECT *
FROM p_dataMoveView_j_view_ds2
CONTEXT( DATAMOVEMENTPLAN = view_ds2: OFF view_ds2: JDBC ds2 )

2 番目の分岐の view_ds2ds2 に、 view_ds3ds1 に、それぞれ移動します。1 番目の分岐の view_ds2 は移動しません。


クエリ 6)

SELECT *
FROM p_dataMoveView_j_view_ds2
CONTEXT( DATAMOVEMENTPLAN = view_ds2: JDBC ds2 )

データ移動の定義があいまいであることから、このクエリは失敗します。結合の両方の分岐に view_ds2 が存在しているので、 view_ds2 ビューのデータ移動を 2 回定義する必要があります。