前回のIBM i の既存プログラムを活かしたハイブリッド開発(その1)に続き、ハイブリッド開発の実装パターン1を行っていきます。
前回作成した仮想既存資産のRPGは次のとおりです。
①消費税計算サブルーチン(10%)
■ 引数
- IN :金額(税抜き)
- OUT:金額(税込み)
■返り値 - なし
このRPGをSQLから呼び出せる、SQLストアド・プロシージャを作成する事でOpen側との連携をすることが可能になります。
それでは具体的にストアド・プロシージャを作成するSQLを見ていきます。
-- プロシージャ作成
CREATE OR REPLACE PROCEDURE
USHIDA@Q24.MY_ZEIKOMI1
(
IN IN_KING1 NUMERIC(011 ,00)
,OUT OT_KING2 NUMERIC(011 ,00)
)
LANGUAGE RPGLE
EXTERNAL NAME 'USHIDA@Q24/Q240101R(MY_ZEIKOMI)'
PARAMETER STYLE GENERAL
;
このSQLではCREATE PROCEDURE
によって ライブラリ USHIDA@Q24
内に MY_ZEIKOMI1
という名前のストアド・プロシージャを定義しています。
続いて、(...)
内に引数の定義をしており、RPG引数のゾーン10進数
は SQL 型 NUMERITC
に該当します。
LANGUAGE
は RPGLE
となり、EXTERNAL NAME
で実際に呼び出されるプログラムをライブラリ/プログラム名(プロシージャ名)
の形式で指定します。
PARAMETER STYLE GENERAL
は、この形式で引数を定義した場合程度に思って下さい。詳細はマニュアルを見て下さい。STRSQLやACSで上記SQLを実行すると以下の様に出力されます。
これで既存RPGにSQLからの入口が出来ました。それでは実際に実行して結果を確かめてみます。
ストアド・プロシージャを呼び出すにはCALL
ステートメントを使用します。
次のSQLで結果を確かめます。
-- 変数定義
CREATE OR REPLACE VARIABLE
USHIDA@Q24.KING1
NUMERIC(011 ,00)
;
CREATE OR REPLACE VARIABLE
USHIDA@Q24.KING2
NUMERIC(011 ,00)
;
-- 変数設定
SET USHIDA@Q24.KING1 = 1000
,USHIDA@Q24.KING2 = 0
;
-- 呼び出し
CALL
USHIDA@Q24.MY_ZEIKOMI1
(
USHIDA@Q24.KING1
,USHIDA@Q24.KING2
)
;
-- 結果
VALUES
USHIDA@Q24.KING1
,USHIDA@Q24.KING2
;
上記SQLでは、ストアド・プロシージャの引数に使用する変数を CREATE VARIABLE
で定義しております。続いてその変数に初期値を SET
しています。初期値をセットしないと変数がNULLの状態でエラーとなります。
CALL
でストアド・プロシージャを呼び出し、最後に結果を VALUES
で出力しています。
「1,000円の税抜き金額を入力に与えると、10%税込みの金額1,100円で出力」 されました。
この様に既存資産であるRPGをSQLのストアド・プロシージャを経由する事で、Open側に既存ビジネスロジックをそのまま活用させる事が可能になりました。
次回はもう一つのパターンがどうなるか?見ていきます。