Providerを実装したインスタンスとは異なるインスタンスで、最初の記事の準備作業を行います。準備作業の結果としてAlways FreeのAutonomous Data WarehouseにAPEXのワークスペースdwapex、ワークスペース・スキーマwksp_dwapex、クリデンシャルSHARE_BUCKET_CREDENTIALは作成済みとします。また、DBMS_SHARE.ENABLE_SHARE、DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACEも実行済みとします。
Providerの記事で作成したAPEXアプリケーションをエクスポートし、Consumerを実装するインスタンスのAPEXワークスペースにインポートします。
インポートしたAPEXアプリケーションのConsumerのページに、以下の処理を組み込みます。
- Delta Sharingのプロファイルよりクリデンシャルを作成
- Share Providerを作成し、クリデンシャルを紐付け
- 利用可能なShareの一覧
- 利用可能なShare Tableの一覧
- Share Linkの作成、削除
- Share Link Viewの作成
以下より実装を進めます。
ページ・デザイナでConsumerのページを開きます。
Share Providerを一覧する対話モード・レポートShare Providersを作成します。ソースのSQL問合せは以下になります。
select * from user_share_providers
Share Providerを操作するために作成するフォームのページは、ページ番号が9、データ・ソースのSQLには以下を記述します。
select
provider_id,
provider_name,
'' delta_sharing_profile
from user_share_providers
主キー列1にはPROVIDER_IDを選択します。
フォームのページShare Providerが作成されます。
ページ・アイテムP9_PROVIDER_NAMEの識別のタイプをテキスト・フィールドに変更します。
ページ・アイテムP9_DELTA_SHARING_PROFILEの識別のタイプをテキスト領域に変更します。検証の最大長を4000に変更します。
Share Providerの作成、削除を行なうプロセスを作成します。デフォルトで作成されているプロセスプロセス・フォームShare Providerはコメント・アウトします。
プロセスCreateでは、以下のコードを実行します。ボタンCREATEの押下で実行します。
プロセスDeleteでは、以下のコードを実行します。ボタンDELETEの押下で実行します。
begin
dbms_share.drop_share_provider(
provider_name => :P9_PROVIDER_NAME
);
end;
Consumerのページに戻り対話モード・レポートShare Providersに、ボタンCREATE_SHARE_PROVIDERを作成します。ターゲットはページ9になります。
属性のリンク列をカスタム・ターゲットへのリンクとし、ターゲットはページ9、主キーのアイテムの名前としてP9_PROVIDER_ID、値となる列に\#PROVIDER_ID#\を指定します。
ダイアログがクローズしたときに対話モード・レポートShare Providersをリフレッシュする動的アクションを作成します。識別の名前はonClose Dialog Share Providerとします。
以上でShare Providersについて出来上がりました。動作を確認してみます。
アプリケーションを実行し、対話モード・レポートShare ProvidersにあるボタンCreateをクリックします。
Share ProviderとしてDEMO_PROVIDERが作成されます。
Providerに含まれるShareを選択し、共有可能な表の一覧を表示します。
最初にProviderを選択するページ・アイテムを作成します。
識別の名前はP3_PROVIDER_NAME、タイプは選択リストとします。ラベルはProviderとします。設定の選択時のページ・アクションとして値のリダイレクトと設定を選択します。
この後にShare Linkを作成する際に、Provider NameとShare Nameがその引数となります。ターゲットに設定した置換文字列はページ・レンダリング時にセッション・ステートに保存されている値で置き換えられるため、選択時のページ・アクションとして値のリダイレクトと設定を選び、値をセッション・ステートに保存した後にリダイレクトを発生させ、ページのレンダリングが行われるようにします。
select provider_name d, provider_name r from user_share_providers
追加値の表示はオフ、NULL値の表示はオン、NULL表示値は- Select Provider -とします。
詳細の保存されていない変更の警告を無視にします。セッション・ステートのストレージはセッションごと(永続)を選択します。
フォームのページShare Linkが作成されます。
Providerに含まれるShareから、Shareをひとつ選択するページ・アイテムを作成します。
識別の名前はP3_SHARE_NAME、タイプは選択リストとします。ラベルはShareとします。設定の選択時のページ・アクションとして値のリダイレクトと設定を選択します。P3_PROVIDER_NAMEの右隣に配置するため、レイアウトの新規行の開始をオフにします。
LOVのタイプはSQL問合せ、SQL問合せとして以下を記述します。
select available_share_name d, available_share_name r
from dbms_share.discover_available_shares(
coalesce(:P3_PROVIDER_NAME,'DUMMY')
)
追加値の表示はオフ、NULL値の表示はオン、NULL表示値は- Select Share -とします。
選択可能なShareはProviderに依存するため、カスケードLOVの親アイテムとしてP3_PROVIDER_NAMEを指定し、親が必要をオンにします。
詳細の保存されていない変更の警告を無視にします。セッション・ステートのストレージはセッションごと(永続)を選択します。
共有可能な表を一覧する対話モード・レポートAvailable Tables (Named)を作成します。
ソースのSQL問合せとして以下を記述します。share_provider、share_nameともにnullの場合は、全件が検索対象になります。
select * from dbms_share.discover_available_tables(
share_provider => :P3_PROVIDER_NAME
,share_name => :P3_SHARE_NAME
)
アプリケーションを実行して動作を確認します。
Provider側で作成したShareのDEMO_SHAREに追加された表CUSTSALESが一覧されます。
Share Linkの作成と削除を行なう機能を実装します。
作成する対話モード・レポートShare LinksのソースのSQL問合せは以下になります。
select * from user_share_links
Share Linkの作成と削除をするフォームのページは、ページ番号が10、名前はShare Link、データ・ソースのSQLには以下を記述します。
select
link_id,
link_name,
share_provider_name,
share_name
from user_share_links
主キー列1にはLINK_IDを選択します。
ページ・アイテムP10_LINK_NAME、P10_SHARE_PROVIDER_NAME、P10_SHARE_NAMEのタイプをテキスト・フィールドに変更します。
Share Linkの作成、削除を行なうプロセスを作成します。デフォルトで作成されているプロセスプロセス・フォームShare Linkはコメント・アウトします。
プロセスCreateでは、以下のコードを実行します。ボタンCREATEの押下で実行します。
begin
dbms_share.create_or_replace_share_link(
share_link_name => :P10_LINK_NAME
,share_provider => :P10_SHARE_PROVIDER_NAME
,share_name => :P10_SHARE_NAME
);
end;
プロセスDeleteでは、以下のコードを実行します。ボタンDELETEの押下で実行します。
begin
dbms_share.drop_share_link(
link_name => :P10_LINK_NAME
);
end;
以上でフォームについては完成です。
Consumerのページに戻り対話モード・レポートShare Linkに、ボタンCREATE_SHARE_LINKを作成します。ターゲットはページ10になります。
属性のリンク列をカスタム・ターゲットへのリンクとし、ターゲットはページ10、主キーのアイテムの名前としてP10_LINK_ID、値となる列に\#LINK_ID#\を指定します。
ダイアログがクローズしたときに対話モード・レポートShare Linksをリフレッシュする動的アクションを作成します。識別の名前はonClose Dialog Share Linkとします。
以上でShare Linksについて出来上がりました。動作を確認してみます。
アプリケーションを実行ます。
ProviderとしてDEMO_PROVIDER、ShareとしてDEMO_SHAREを選択し、対話モード・レポートShare LinksにあるボタンCreateをクリックします。
Link NameにSALES_DATAを入力します。Share Provider NameにはDEMO_PROVIDER、Share NameにはDEMO_SHAREが入力済みです。
作成をクリックします。
Share LinkとしてSALES_DATAが作成されます。
最後にShare Link Viewの一覧と作成を実装します。
Share Link Viewを一覧する対話モード・レポートShare Link Viewsを作成します。ソースのSQL問合せは以下になります。
select * from user_share_link_views
Share Link Viewを作成するフォームのページは、ページ番号が11、データ・ソースのSQLには以下を記述します。
select
'' id,
view_name,
link_name share_link_name,
share_schema_name,
share_table_name
from user_share_link_views
主キー列1にはIDを選択します。フォームのページShare Link Viewが作成されます。
ページ・アイテムP11_VIEW_NAMEの識別のタイプをテキスト・フィールドに変更します。
ページ・アイテムP11_SHARE_LINK_NAMEの識別のタイプを選択リストに変更します。
LOVのタイプはSQL問合せとし、SQL問合せに以下を記述します。
select link_name d, link_name r from user_share_links
追加値の表示はオフ、NULL値の表示はオン、NULL表示値は- Select Share Link -と記述します。
ページ・アイテムP11_SHARE_SCHEMA_NAMEの識別のタイプを選択リストに変更します。
LOVのタイプはSQL問合せとし、SQL問合せに以下を記述します。
select schema_name d, schema_name r from dbms_share.discover_available_tables(
share_name => (
select share_name from user_share_links where link_name = :P11_SHARE_LINK_NAME
)
)
追加値の表示はオフ、NULL値の表示はオン、NULL表示値は- Select Shema -と記述します。
カスケードLOVの親アイテムにP1_SHARE_LINK_NAMEを指定し、親が必要をオンにします。
LOVのタイプはSQL問合せとし、SQL問合せに以下を記述します。
select table_name d, table_name r from dbms_share.discover_available_tables(
share_name => (
select share_name from user_share_links where link_name = :P11_SHARE_LINK_NAME
)
)
where schema_name = :P11_SHARE_SCHEMA_NAME
追加値の表示はオフ、NULL値の表示はオン、NULL表示値は- Select Table -と記述します。
カスケードLOVの親アイテムにP11_SHARE_LINK_NAMEとP11_SHARE_SCHEMA_NAMEを指定し、親が必要をオンにします。
Share Link Viewを作成するプロセスを作成します。作成されたShare Link Viewはビューなので、DROP VIEWコマンドで削除できます。そのため、このアプリケーションでは作成のみを実装します。デフォルトで作成されているプロセスプロセス・フォームShare Link Viewはコメント・アウトします。
プロセスCreateでは、以下のコードを実行します。ボタンCREATEの押下で実行します。
begin
dbms_share.create_share_link_view(
view_name => :P11_VIEW_NAME
,share_link_name => :P11_SHARE_LINK_NAME
,share_schema_name => :P11_SHARE_SCHEMA_NAME
,share_table_name => :P11_SHARE_TABLE_NAME
);
end;
以上でフォームについては完成です。
Consumerのページに戻り対話モード・レポートShare Link Viewsに、ボタンCREATE_SHARE_LINK_VIEWを作成します。ターゲットはページ11になります。
ダイアログがクローズしたときに対話モード・レポートShare Link Viewsをリフレッシュする動的アクションを作成します。識別の名前はonClose Dialog Share Link Viewとします。
以上でShare Link Viewについて出来上がりました。
これでDelta Sharingによるデータ共有の実装は、すべて完了です。
アプリケーションを実行し、対話モード・レポートShare Link ViewsにあるボタンCreateをクリックします。
Link NameはCUSTSALES_SHARE_Vとします。Share Link NameとしてSALES_DATA、Share Schema NameとしてWKSP_DWAPEX、Share Table NameとしてCUSTSALESを順番に選択します。
作成をクリックします。
ビューCUSTSALES_SHARE_Vが作成されます。
SQLコマンドより、ビューCUSTSALES_SHARE_Vを検索します。
select * from custsales_share_v
Provider側に存在していた表CUSTSALESを、Delta Sharingを使って、別インスタンスのConsumerから参照することができました。
今回のシリーズ記事は以上になります。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完