タイガー!タイガー!じれったいぞー!(SE編)

AS400,WAS,GlassFish,Java,JavaEE,JSF等の開発における日々の気づきをまとめたブログ(備忘録)。

【AS400】RPG-CALL文での数値パラメータ渡し

コマンドラインから、直接、CALL命令(プログラム呼び出し)を実行する場合、数値パラメータを渡す必要がある場合の対処方法です。

パック10進数であれば、パラメータにて数値を渡すことが可能です。
下記のようなサンプルを作成してみました。

TIGER/RPGLESRC SAMPLE27
     D MAIN            PR                  EXTPGM('SAMPLE27')
     D                                3P 0     
     D                                5P 2   
     D                                8P 0   
     D                                4P 0   
     D* 
     D MAIN            PI 
     D  P@PARM1                       3P 0
     D  P@PARM2                       5P 2 
     D  P@PARM3                       8P 0 
     D  P@PARM4                       4P 0
     D*
     C*********************************************************************
     C* MAIN
     C*********************************************************************
      /FREE
          DSPLY P@PARM1;
          DSPLY P@PARM2;
          DSPLY P@PARM3;
          DSPLY P@PARM4;
            
          DSPLY (P@PARM2 + 100);
                 
          *INLR = *ON;
          RETURN; 
      /END-FREE

パラメータの書き方

数値パラメータの書き方は、下記の通りになります。数値1と数値-1の例になります。

数値  1 ・・・ X'001F'
数値 -1 ・・・ X'001D'

P-COMM上のコマンド入力画面より、CALL命令を実施しますと、結果がきちんと表示されました!

> CALL PGM(TIGEROBJ/SAMPLE27)
       PARM(X'001F' X'00525F' X'020150122F' X'00777D')
  DSPLY    1            
  DSPLY    525
  DSPLY  20150122      
  DSPLY   777-
  DSPLY   10525
注意点
  • 小数点以下ありの場合でも、カンマは不要です。
  • パラメータの桁数が偶数の場合、入力する値の先頭にひとつ0を追加する必要があります。
  • なお、RPGパラメータ定義をゾーン10進数にして実行すると、10進数エラーになります。詳しいことはわかりませんが、私はパラメータを数値にする場合は、パック10進数で統一しています。
> CALL PGM(TIGEROBJ/SAMPLE27)                                      
             PARM(X'001F' X'00525F' X'020150122F' X'00777D')       
  10 進数データ・エラー。                                          
  (C G D F) 10 進数データ・エラーが起こった。