概要
TDVでは、最初のステップとして、「データソース」としてメタデータのインポートを実施しますが、そのときに対象となるのは、リレーショナルデータベース内のテーブルやファイルサーバ内のファイルだけではなく、データベース内のファンクションも対象となります。
本記事では、PostgreSQLについて、イントロスペクトされたファンクションをTDVでどのように扱うことができるかを、シンプルな以下3つのパターンで紹介します。
1. パラメータなしファンクションをテーブル形式のデータサービスとして公開
2. パラメータありファンクションをプロシージャ形式のデータサービスとして公開
3. パラメータありファンクションをテーブル形式のデータサービスとして公開
なお、Oracleのストアドプロシージャについても同様に扱うことができます。
以下の記事を参照ください。
イントロスペクトされたデータソースのストアドプロシージャについて(Oracle)
検証環境
製品 | バージョン | 実行環境 |
---|---|---|
TDV | 8.8.0 | Windows 10 |
PostgreSQL | 14.6 | Windows 10 |
1. パラメータなしファンクションをテーブル形式のデータサービスとして公開
イントロスペクト対象のファンクション
イントロスペクト対象とするファンクションは freightcharge_total()
です。
order テーブル内の全オーダーの、運賃(freightcharge)の総合計を返すファンクションです。
TDV Studioでのビュー作成、公開
ファンクション freightcharge_total()
をイントロスペクトを経てインポートすることで、下図のように、TDV Studio上で実行することができます。
このfreightcharge_total()
からビューを作成し、 view_freightcharge_total
というテーブル型のデータサービスとして公開します。
メタデータとしてインポートされたファンクションをビューの入力とする場合は、以下のFROM句のように記述します。
SELECT
CAST(freightcharge_total.returnValue AS INTEGER) 運賃総合計
FROM
/shared/KB06/PostgreSQL14/"public"/freightcharge_total() freightcharge_total
外部クライアントからの利用
TDVにより公開されたデータベースに、外部クライアント(本検証では DBeaverを利用)から接続します。
以下のとおり、公開したテーブル view_freightcharge_total
は、データベースのテーブルと同じように利用することができます。
2. パラメータありファンクションをプロシージャ形式のデータサービスとして公開
イントロスペクト対象のファンクション
イントロスペクト対象とするファンクションは freightcharge_sum()
です。
customerid
をパラメータとして受け取り、order テーブルから、当該customerid
のオーダーの運賃(freightcharge)の合計を返すファンクションです。
TDV Studioでの公開
ファンクション freightcharge_sum()
をイントロスペクトを経てインポートすることで、下図のように、TDV Studio上で実行することができます。
この freightcharge_sum()
を、proc_freightcharge_sum
というプロシージャ型のデータサービスとして、直接公開します。
外部クライアントからの利用
TDVにより公開されたデータベースに、外部クライアント(本検証では DBeaverを利用)から接続します。
以下のとおり、公開したプロシージャ proc_freightcharge_sum
は、テーブルではなくプロシージャとして認識されます。また、実行する場合はそのプロシージャに対し、以下の例のようなパラメータ付きのSELECT 文を実行します。
SELECT * FROM KB06.proc_freightcharge_sum(3);
3. パラメータありファンクションをテーブル形式のデータサービスとして公開
このパラメータありファンクション freightcharge_sum()
を、仮想カラムを使用することで、テーブル形式で公開する方法もあります。
TDV Studioでのビュー作成、公開
freightcharge_sum()
からビューを作成し、 view_freightcharge_sum
というテーブル型のデータサービスとして公開します。
SELECT
CAST(freightcharge_sum.returnValue AS INTEGER) 運賃合計,
{DECLARE cid INTEGER DEFAULT 1} customerid
FROM
/shared/KB06/PostgreSQL14/"public"/freightcharge_sum(cid) freightcharge_sum
外部クライアントからの利用
公開したテーブル view_freightcharge_sum
を、データベースのテーブルと同じように利用します。
この時、WHERE句で仮想カラムcustomerid
に与えた値が、ファンクションへの引数となります。
SELECT * FROM KB06.view_freightcharge_sum WHERE customerid = 3;