前回のIBM i の既存プログラムを活かしたハイブリッド開発(その2)に続き、ハイブリッド開発の実装パターン2を行っていきます。
以前作成した仮想既存資産のRPGは次のとおりです。
②消費税計算サブルーチン(8%)
■ 引数
- IN :金額(税抜き)
■返り値 - 金額(税込み)
このRPGはSQLから呼び出せる、SQLユーザー定義関数(以下UDF)を作成する事でOpen側との連携をすることが可能になります。
それでは具体的にUDFを作成するSQLを見ていきます。
-- UDF(ユーザー定義関数)作成
CREATE OR REPLACE FUNCTION
USHIDA@Q24.MY_ZEIKOMI2
(
IN_KING1 NUMERIC(011 ,00)
)
RETURNS NUMERIC(011 ,00)
LANGUAGE RPGLE
EXTERNAL NAME 'USHIDA@Q24/Q240201R(MY_ZEIKOMI)'
PARAMETER STYLE GENERAL
;
このSQLではCREATE FUNCTION
によって ライブラリ USHIDA@Q24
内に MY_ZEIKOMI2
という名前のUDFを定義しています。
続いて、(...)
内に引数の定義をしており、RPG引数のゾーン10進数
は SQL 型 NUMERIC
に該当します。
ストアド・プロシージャと異なり、関数は単一の返り値を持つのでRETURNS
で同様に SQL 型 NUMERIC
を定義しています。
LANGUAGE
は RPGLE
となり、EXTERNAL NAME
で実際に呼び出されるプログラムをライブラリ/プログラム名(プロシージャ名)
の形式で指定します。
PARAMETER STYLE GENERAL
は、この形式で引数を定義した場合程度に思って下さい。詳細はマニュアルを見て下さい。STRSQLやACSで上記SQLを実行すると以下の様に出力されます。
これで既存RPGにSQLからの入口が出来ました。それでは実際に実行して結果を確かめてみます。
UDFを呼び出すにはSELECT
ステートメントなどで関数を使用します。
次のSQLで結果を確かめます。
-- 実行
SELECT
KING1
,USHIDA@Q24.MY_ZEIKOMI2(KING1) AS KING2
FROM
( SELECT
1000 AS KING1
FROM SYSIBM.SYSDUMMY1
)
;
上記SQLでは、選択の結果として関数 MY_ZEIKOMI2(...)
に税抜き金額
を渡す事で、税込み金額
の結果を取得しています。SQL を実行すると以下の様に出力されます。
UDFに 「1,000円の税抜き金額を入力に与えると、8%税込みの金額1,100円が返却」 されました。
この様に既存資産であるRPGをSQLのユーザー定義関数(UDF)を経由する事で、Open側に既存ビジネスロジックをそのまま活用させる事が可能になりました。
これで、今回のハイブリッド開発シリーズはおしまいです。この様にIBM iでは既存資産を活かして効率的なOpen開発が行えるのです。