SQLからRPGを呼び出す場合ストアドプロシージャ経由でしか呼び出せない思っていました。
内容的にはほぼこの記事です。
ストアドプロシージャ呼び出し
サンプルプログラムを作成します。
sum.rpgle
**FREE
Dcl-Pi SUM;
numa int(10);
numb int(10);
result int(10);
End-Pi;
result = numa + numb;
Return;
ストアドプロシージャを作成します。
sumpgm
create or replace procedure muralib.sumpgm (IN numa INT, IN numb INT, OUT result INT)
LANGUAGE RPGLE
EXTERNAL NAME MURALIB.SUM GENERAL;
ストアドプロシージャ経由で呼び出します。
CALL muralib.sumpgm(5,5,null);
RPGを直接呼び出してみます。
CALL muralib.sum(5,5,0);
呼び出せますが、結果が戻りません。
直接呼出しで結果の取得
結果を戻すように改修します。
sum2.sqlrpgle
**FREE
Dcl-Pi SUM;
numa int(10);
numb int(10);
End-Pi;
Dcl-S rowCount Int(10);
Dcl-Ds resultSet Dim(1) Qualified;
result int(10);
End-Ds;
resultSet(1).result = numa + numb;
rowCount = 1;
Exec SQL Set Result Sets Array :resultSet For :rowCount Rows;
Return;
実行します。
CALL muralib.sum2(5,5,0);
結果が取得できました。元記事では複数項目・複数レコードを返却しています。