データ移動の例¶
以下の基本ビューがあるとします。
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_ds2
と view_ds3
が ds1
データソースに移動します。
クエリ 2)
SELECT *
FROM p_dataMoveView
view_ds2
が ds3
に、 view_ds3
が ds1
に、それぞれ移動します。
クエリ 3)
SELECT *
FROM p_dataMoveView
CONTEXT( DATAMOVEMENTPLAN = view_ds2: OFF )
view_ds3
が ds1
に移動します。このビューでは view_ds2
を ds3
に移動することを定義していますが、この移動はクエリの DATAMOVEMENTPLAN
句で OFF
オプションによって無効になっています。
クエリ 4)
SELECT *
FROM p_dataMoveView_j_view_ds2
CONTEXT( DATAMOVEMENTPLAN = view_ds2: JDBC ds1 view_ds2: JDBC ds2 )
1 番目の分岐の view_ds2
は ds1
に、2 番目の分岐の view_ds2
は ds2
に、それぞれ移動します。 view_ds3
は ds1
に移動します。これらのデータの移動先は、ビューの定義で設定したデータソースではなく、 DATAMOVEMENTPLAN
句で設定したデータソースである点に注意してください。
クエリ 5)
SELECT *
FROM p_dataMoveView_j_view_ds2
CONTEXT( DATAMOVEMENTPLAN = view_ds2: OFF view_ds2: JDBC ds2 )
2 番目の分岐の view_ds2
は ds2
に、 view_ds3
は ds1
に、それぞれ移動します。1 番目の分岐の view_ds2
は移動しません。
クエリ 6)
SELECT *
FROM p_dataMoveView_j_view_ds2
CONTEXT( DATAMOVEMENTPLAN = view_ds2: JDBC ds2 )
データ移動の定義があいまいであることから、このクエリは失敗します。結合の両方の分岐に view_ds2
が存在しているので、 view_ds2
ビューのデータ移動を 2 回定義する必要があります。