概要
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;