Page History
...
これらのストアド プロシージャを SQLService で実行する場合は、次のような EXECUTE コマンドを使用できます。
SET PARAMETER(*LIST) #WRKLST(PARM1)
EXECUTE CALL("CALLSELECT(?)") CALLTYPE(*QUERY)
SET PARAMETER(*LIST) #WRKLST(PARM1)
EXECUTE CALL("CALLUPDATE(?)") CALLTYPE(*UPDATE) RETURN(*INTEGER)
SET PARAMETER(*LIST) #WRKLST(PARM1)
EXECUTE CALL("CALLEXECUT(?)") CALLTYPE(*EXECUTE) RETURN(*INTEGER)
リストと変数
QUERYキーワード、SQLステートメントがSELECTの場合のPREPAREDキーワード、またはCALLTYPEに*QUERYが指定されたCALLキーワードのいずれかを使用する場合、結果セットが返されるようにするには、このコマンドで作業リストを提供します。
この作業リストには、クエリーから返されると予想されるフィールドが含まれます。リストはフィールドの順序で埋められます。SELECTステートメントは、このリストに示されるよりも多くのフィールドを実際に返すことができますが、列よりも多いリスト・フィールドは返されません。列の値は、resultSet.getString (列インデックス)メソッドを使用して結果セットから受け取ります。リスト・エントリー・フィールドはこの文字列値で設定され、Javaデータ・タイプからネイティブ・データ・タイプへの変換が行われます。
非常に大きなリストが返されると予想される場合、この作業リストを省略し、READコマンドを使用して結果セットにアクセスできます。
UPDATEキーワードは結果セットを返さないため、この状況で作業リストを指定する必要はありません。
CALLでCALLTYPEに*UPDATEを指定した場合、行数(更新されたレコードの数)が返されるため、この値を取得するには1列のリストを指定できます。
呼び出したプロシージャ(CALLコマンドを使用)にパラメータを渡す必要がある場合、パラメータを含む作業リストを指定する必要があります。この作業リストには、渡す必要があるパラメータと同じだけの列があります。作業リストの最初の行のみが使用されます。リストは、SET PARAMETER(*LIST)コマンドを使用して準備する必要があります。
この仕組みについての詳細は、以下の例と5.31.12 SQLServiceの例の例を参照してください。
例:
SQLServiceサービスのSET、EXECUTE、READの各コマンドは、それぞれ緊密に関連しています。
RDML
* JSM コマンドおよびメッセージ・フィールドの定義DEFINE FIELD(#JSMSTS) TYPE(*CHAR) LENGTH(020)DEFINE FIELD(#JSMMSG) TYPE(*CHAR) LENGTH(256)DEFINE FIELD(#JSMCMD) TYPE(*CHAR) LENGTH(256)
* クエリから返される結果セットを含むフィールドとリストを定義DEFINE FIELD(#COL1) TYPE(*CHAR) LENGTH(010)DEFINE FIELD(#COL2) TYPE(*CHAR) LENGTH(020)DEFINE FIELD(#COL3) TYPE(*DEC) LENGTH(008) DECIMALS(0)DEF_LIST NAME(#WRKLST) FIELDS(#COL1 #COL2 #COL3) TYPE(*WORKING)
* リモート・プロシージャに渡すフィールトとリストを定義し、クエリ値を示すDEFINE FIELD(#PARAM1) TYPE(*CHAR) LENGTH(010)DEF_LIST NAME(#PARAMLST) FIELDS(#PARAM1) TYPE(*WORKING)CHANGE FIELD(#PARAM1) TO(A1001)ADD_ENTRY TO_LIST(#PARAMLST) *
...
EXECUTE の実行時にリモート プロシージャに渡されるようにリストを設定するCHANGE FIELD(#JSMCMD) TO('SET PARAMETER(*LIST) SERVICE_LIST(PARAM1)')USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG #PARAMLST)
* プロシージャ呼び出し
CHANGE FIELD(#JSMCMD) TO('EXECUTE CALL("CALLSELECT
...
(?)") CALLTYPE(*QUERY) SERVICE_LIST(COL1,COL2,COL3)')USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG #WRKLST)
RDMLX
* JSM コマンドおよびメッセージ・フィールドの定義Define Field(#JSMSTS) Type(*CHAR) Length(020)Define Field(#JSMMSG) Type(*CHAR) Length(256)Define Field(#JSMCMD) Type(*CHAR) Length(256)Define Field(#JSMHND) Type(*Char) Length(4)
* クエリから返される結果セットを含むフィールドとリストを定義Define Field(#COL1) Type(*CHAR) Length(010)Define Field(#COL2) Type(*CHAR) Length(020)Define Field(#COL3) Type(*DEC) Length(008) Decimals(0)Def_List Name(#WRKLST) Fields(#COL1 #COL2 #COL3) Type(*WORKING)
* リモート・プロシージャに渡すフィールトとリストを定義し、クエリ値を示すDefine Field(#PARAM1) Type(*CHAR) Length(010)Def_List Name(#PARAMLST) Fields(#PARAM1) Type(*WORKING)#PARAM1 := A1001Add_Entry To_List(#PARAMLST)
...
* EXECUTE 実行時、リモート・プロシージャに渡すフィールトとリストを設定する#JSMCMD := 'Set Parameter(*LIST) Service_List(PARAM1)'Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG #PARAMLST)
* プロシージャ呼び出し
#JSMCMD := 'Execute("CallSelect
...
(?)") CallType(*QUERY)'Use Builtin (JSM_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG #WRKLST)