概要
TDVでは、最初のステップとして、「データソース」としてメタデータのインポートを実施しますが、そのときに対象となるのは、リレーショナルデータベース内のテーブルやファイルサーバ内のファイルだけではなく、データベース内のストアドプロシージャも対象となります。
本記事では、イントロスペクトされたストアドプロシージャをTDVでどのように扱うことができるかをシンプルな以下2つのパターンで紹介します。
検証環境
製品 | バージョン | 実行環境 |
---|---|---|
TDV | 8.5.1 | Windows Server 2019 |
Oracle | 19c | Amazon RDS |
1. パラメータなしストアドプロシージャをテーブル形式のデータサービスとして公開
イントロスペクト対象のストアドプロシージャ
イントロスペクト対象とするプロシージャは CUSTOMER_AVG_AGE
です。CUSTOMERS
テーブル内の全顧客の平均年齢を返すシンプルなプロシージャです。
TDV Studioでの実行やビュー作成、公開
ストアドプロシージャ CUSTOMER_AVG_AGE
をイントロスペクトを経てインポートすることで、下図①~②で示すように、TDV Studio上で実行することができます。
本記事における検証では、 CUSTOMER_AVG_AGE
をいくつかの中間ビューを経て、同名のcustomer_avg_age
というテーブル型のデータサービスとして公開します。
メタデータとしてインポートされたストアドプロシージャを後続のビューの入力とする場合は、以下のFROM句のように記述します。
今回のケースでは、パラメータを受け付けないプロシージャであるため ()
には何も記述しません。
SELECT
CAST(CUSTOMER_AVG_AGE.AVG_AGE AS INTEGER) 平均年齢
FROM
/shared/oracle19c/physical/metadata/"oracle-19c"/TDV/CUSTOMER_AVG_AGE() CUSTOMER_AVG_AGE
一方で、パラメータをとるプロシージャを入力とするビューは以下のようなクエリとなります。
SELECT
*
FROM
/shared/oracle19c/physical/metadata/"oracle-19c"/TDV/CUSTOMER_AGE('123') CUSTOMER_AGE
外部クライアントから利用
TDVにより公開されたデータベース oracle19c
に外部クライアント(本検証では DBeaverを利用)から接続します。
以下の図のとおり、公開したテーブルcustomer_avg_age
はデータベースのテーブルと同じように利用することができます。
2. パラメータありストアドプロシージャをプロシージャ形式のデータサービスとして公開
イントロスペクト対象のストアドプロシージャ
イントロスペクト対象とするプロシージャはCUSTOMER_AGE
です。CUST_ID
をパラメータとして受け取り、CUSTOMER_ID = CUST_ID
を満たすCUSTOMERS
テーブル内の顧客の年齢を返すシンプルなプロシージャです。
TDV Studioでの実行・公開
ストアドプロシージャCUSTOMER_AGE
をイントロスペクトを経てインポートすることで、下図①~③で示すように、TDV Studio上で実行することができます。
このとき、実際にOracle内のストアドプロシージャが実行されています。
この検証では、CUSTOMER_AGE
プロシージャをproc_customer_age
というプロシージャ型のデータサービスとしてそのまま公開します。
外部クライアントから利用
TDVにより公開されたデータベースoracle19c
に外部クライアント(本検証では DBeaverを利用)から接続します。
以下の図のとおり、公開したプロシージャproc_customer_age
はテーブルではなくプロシージャとして認識されます。
また、実行する場合はそのプロシージャに対し、以下の例のようなパラメータ付きのSELECT 文を実行します。
SELECT * FROM oracle.oracle.proc_customer_age('335');