LoginSignup
1
1

More than 1 year has passed since last update.

SBMJOB時のCALL 引数その2

Last updated at Posted at 2022-12-04

CALLの動的引数

SBMJOB時のCALL 引数その1 の続きで、V7R5 の新機能、CALL コマンドの動的引数で、明示的に SBMJOB した場合どうなるか?試してみました。

CLサンプルソースは以下の通り

USC_SBMJ21
PGM                                                               
     DCL VAR(&@PSTR1 )  TYPE(*CHAR) LEN(01  )         /* 文字列 */
     DCL VAR(&@PSTR2 )  TYPE(*CHAR) LEN(50  )         /* 文字列 */
     DCL VAR(&@PDEC1 )  TYPE(*DEC ) LEN(08 0)         /* 数値   */
                                                                  
     CHGVAR  VAR(&@PSTR1 ) VALUE('+                               
                                 U+                               
                                ')                                
                                                                  
     CHGVAR  VAR(&@PSTR2 ) VALUE('+                               
                                 ABCDEFGHIJ+                      
                                 KLMNOPQRST+                      
                                 abcdefghij+                      
                                 klmnopqrst+                      
                                 uvwxyzZYXW+                      
                                ')
     CHGVAR  VAR(&@PSTR2 ) VALUE('+                
                                 ABCDEFGHIJ+       
                                 KLMNOPQRST+       
                                 abcdefghij+       
                                 klmnopqrst+       
                                 uvwxyzZYXW+       
                                ')                 
                                                   
     CHGVAR  VAR(&@PDEC1 ) VALUE(+                 
                                 12345678+         
                                )                  
                                                   
                                                   
      SBMJOB     CMD(                              + 
                  CALL USC_SBMJ22                  + 
                       PARM(                       + 
                            (&@PDEC1 (*DEC 8 0))   + 
                            (&@PSTR1 (*CHAR 01))   + 
                            (&@PSTR2 (*CHAR 50))   + 
                       )                           + 
                 ) JOBQ(QBATCH)    
USC_SBMJ22
PGM PARM(                   +                                                 
         &@PDEC1            +                                                 
         &@PSTR1            +                                                 
         &@PSTR2            +                                                 
    )                       +                                                 
                                                                              
                                                                              
     DCL VAR(&@PSTR1 )  TYPE(*CHAR) LEN(01  )         /* 文字列 */            
     DCL VAR(&@PSTR2 )  TYPE(*CHAR) LEN(50  )         /* 文字列 */            
     DCL VAR(&@PDEC1 )  TYPE(*DEC ) LEN(08 0)         /* 数値   */            
/*   DCL VAR(&@PDEC1 )  TYPE(*DEC ) LEN(15 5)  */     /* 数値   */
     DMPCLPGM                                                         
                                                                      
     SNDPGMMSG  MSG('&@PSTR1 を参照 ')                                
     IF COND(&@PSTR1 *EQ ' ') THEN(DO)                                
     ENDDO                                                            
                                                                      
     SNDPGMMSG  MSG('&@PSTR2 を参照 ')                                
     IF COND(&@PSTR2 *EQ ' ') THEN(DO)                                
     ENDDO                                                            
                                                                      
     SNDPGMMSG  MSG('&@PDEC1 を参照 ')                                
     IF COND(&@PDEC1 *EQ 12345678) THEN(DO)                           
             SNDUSRMSG  MSG('&@PDEC1 を参照出来た ') MSGTYPE(*INFO) + 
                          TOUSR(USHIDAY)                              
     ENDDO

結果は、良い感じに変数が渡っています。V7R5 からはこれまでの TYPE(*DEC) LEN(15 5) 縛りから開放されますね。因みに (&@PSTR3 (*CHAR 32767)) のCL文字列最大長でも正常に動作しました。
最新ほやほやの機能すぎて、開発側としては、まだ使いづらいですが、ロジックの見通しが良くなっていく事には変わりありませんので、歓迎です!

CLダンプ_QPPGMDMP
 変数                   タイプ      長さ           値                            16 進値                                      
                                                   *...+....1....+....2....+     * . . . + . . . . 1 . . . . + . . . . 2 . . .
&@PDEC1                  *DEC           8 0        12345678                                                                   
&@PDEC2                  *DEC           1 1        0.1                                                                        
&@PSTR1                  *CHAR            1       'U'                            E4                                           
&@PSTR2                  *CHAR           50       'ABCDEFGHIJKLMNOPQRSTabcde'    C1C2C3C4C5C6C7C8C9D1D2D3D4D5D6D7D8D9E2E381828
                                    +26           'fghijklmnopqrstuvwxyzZYXW'    86878889919293949596979899A2A3A4A5A6A7A8A9E9E
&@PSTR3                  *CHAR        32767       'X*X*                     '    E75CE75C4040404040404040404040404040404040404
                                    +26           '                         '    404040404040404040404040404040404040404040404
                                    +51           '                         '    404040404040404040404040404040404040404040404
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1