You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

5.31.4 GET

GET コマンドを使って、ストアド・プロシージャ呼び出しから戻された値を取得する、もしくは準備したステートメントのパラメータ・リストからのエラーの行番号を取得することができます。
構文:

コマンド

キーワード

開発者用メモ

GET

OBJECT

*PARAMETERLISTROW

必須。この値を使って、エラーが生じたリスト・エントリーを返します。 見つかった誤りのある最初の行番号が、JSMコマンド組み込み関数のJSMメッセージ・フィールドに返されます。

 

 

*PARAMETERCALL

ストアド・プロシージャの呼び出しパラメータを返す場合に使用されます。

 

 

*NEXTRESULT

次の結果セットに移動する際に使用します。結果セットが存在しない場合は、ステータス・コード NORESULT が返されます。

コメント/警告
このコマンドは、パラメータ・リストを含むプリペアド・ステートメントが重複キー・エラーなどの例外を返した場合に特に役立ちます。このコマンドを使用すると、リスト内のどの行がエラーの原因なのかを解明できるため、正しい手段を講じることができます。
このコマンドを使用する場合、通常の流れは以下のようになります。
ステップ 1.: プリペアド・ステートメントを実行します。
ステップ 2.: 返されたステータスがOKの場合、処理を続行します。
ステップ 3.: 返されたステータスがOK以外の場合、GETコマンドを使用して、エラーの行を明確にします。

RDML

  • INSERT ステートメント用のフィールド定義
    DEFINE FIELD(#COLCMD) TYPE(*CHAR) LENGTH(100)
    DEF_LIST NAME(#WRKCMD) FIELDS(#COLCMD) TYPE(*WORKING)
    *
  • 作業リスト内で使用するフィールドを定義
    DEFINE FIELD(#COL1) TYPE(*CHAR) LENGTH(10)
    DEFINE FIELD(#COL2) TYPE(*CHAR) LENGTH(20)
    DEFINE FIELD(#COL3) TYPE(*DEC) LENGTH(8) DECIMALS(0)
    DEFINE FIELD(#COL4) TYPE(*DEC) LENGTH(12) DECIMALS(2)
     
  • INSERT ステートメントで使用する、
    * 値を入れるための作業リストを定義
    DEF_LIST NAME(#WRKLST) FIELDS(#COL1 #COL2 #COL3 #COL4) TYPE(*WORKING)
     
    * バインド値の作成
    CHANGE FIELD(#COL1) TO(B2001)
    CHANGE FIELD(#COL2) TO('Tom')
    CHANGE FIELD(#COL3) TO(45)
    CHANGE FIELD(#COL4) TO(35000.60)
    ADD_ENTRY TO_LIST(#WRKLST)
  • (**********)
    CHANGE FIELD(#COL1) TO(A2012)
    CHANGE FIELD(#COL2) TO('Antony')
    CHANGE FIELD(#COL3) TO(45)
    CHANGE FIELD(#COL4) TO(35000.60)
    ADD_ENTRY TO_LIST(#WRKLST)
     
  • INSERT の準備
    CHANGE FIELD(#COLCMD) TO('INSERT INTO TBLNAME(ID,NAME,AGE,SALARY) VALUES(?,?,?,?)')
    ADD_ENTRY TO_LIST(#WRKCMD)
    CHANGE FIELD(#JSMCMD) TO('SET PARAMETER(*SQL) ') Service_List(COLCMD)
    USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG #WRKCMD)
     
  • 挿入する日付を含むリストを準備
    CHANGE FIELD(#JSMCMD) TO('SET PARAMETER(*LIST) SERVICE_LIST(COL1,COL2,COL3,COL4)')
    USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG #WRKLST)
    *
  • 準備したステートメントを実行
    CHANGE FIELD(#JSMCMD) TO('EXECUTE PREPARED(*SQLPARAMETER)')
    USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG)
     
  • エラー発生の場合、問題の行を検知する
    IF COND('#JSMSTS *NE OK')
    CHANGE FIELD(#JSMCMD) TO('GET OBJECT(*PARAMETERLISTROW)')
    USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG)
    *
    DISPLAY FIELDS(#JSMMSG)
    ENDIF
    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)
     
  • INSERT ステートメント用のフィールド定義
    Define Field(#COLCMD) Type(*CHAR) Length(100)
    Def_List Name(#WRKCMD) Fields(#COLCMD) Type(*WORKING)
     
  • クエリから返される結果セットを含むフィールドとリストを定義
    Define Field(#COL1) Type(*CHAR) Length(010)
    Define Field(#COL2) Type(*CHAR) Length(020)
    Define Field(#COL3) Type(*DEC) Length(008) Decimals(0)
    Define Field(#COL4) Type(*DEC) Length(012) Decimals(0)
    Def_List Name(#WRKLST) Fields(#COL1 #COL2 #COL3) Type(*WORKING)
     
    * バインド値の作成
    #COL1 := 'B2001'
    #COL2 := 'Tom'
    #COL3 := 45
    #COL4 := 35000.60
    Add_Entry To_list(#Wrklst)
     
    #COL1 := 'B2002'
    #COL2 := 'Jones'
    #COL3 := 23
    #COL4 := 22000.60
    Add_Entry To_list(#Wrklst)
     
  • INSERT の準備
    #COLCMD := 'Insert Into TBLNAME(ID,NAME,AGE,SALARY) VALUES(?,?,?,?)'
    Add_Entry To_list(#Wrkcmd)
    #JSMCMD := 'Set Parameter(*SQL)'
    Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG #WRKCMD)
     
  • 挿入する日付を含むリストを準備
    #JSMCMD := 'Set Parameter(*LIST)'
    Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG #WRKLST)
     
  • 準備したステートメントを実行
    #JSMCMD := 'Execute Prepared(*SQLPARAMETER)'
    Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)
     
    If '#JSMSTS *ne Ok'
  • If an error occur, find the problem row - Get command will return the row number into the #JSMMSG field
    #JSMCMD := 'Get Object(*PARAMETERLISTROW)'
    Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)
    ENDIF
     
     
  • No labels