ソケットごとの実行 SQL (可変長) とその状況の収集 (V5R4)

ソケットごとの実行 SQL (可変長) の収集 (V5R4)」で”ジョブの最終実行SQL”を取得できることを紹介しました。

この取得できる情報の中に「Status of current SQL statement」という項目があるのですが、
いろいろ実験してみたところ、これが今現在実行中か/すでに終わっていてキャッシュにいるだけなのかを示す情報のようだ、ということがわかりました。(明確に書いてあるものを見つけられなかったので、あくまで”ようだ”なのですが…)

確かに、この API で取得できる「Current SQL statement」は”ジョブの最終実行SQL”で、現在実行中の SQL なのか、もうとっくに終わっていてその後ながらく SQL を処理していないのかの区別がつきません。
その区別を見るための目安として、少なくともこの「Status of current SQL statement」もあわせて見るのは有用だろうと思います。

ということで、今回追加したバージョンを作ってみました。

                SELECT ;                                                                            
                   WHEN JOBI0900.StsCurCrs = 1 ;                                                    
                      SQLStatus = 'ACT' ;                                                           
                   WHEN JOBI0900.StsCurCrs = 2 ;                                                    
                      SQLStatus = 'INACT' ;                                                         
                   OTHER ;                                                                          
                      SQLStatus = %char(JOBI0900.StsCurCrs) ;                                       
                endSL ;                                          

実験してみた範囲では。実行中は 1 で、終わると 2 になりました。
そこで、わかりやすくするため、それぞれ 'ACT' と 'INACT' という文字に置き換えてみました。

結果、プロトタイプは↑の値を追加したものになります。

     D RtvJobSQL       PR                                                                           
     D  JobName                      10a   CONST                                                    
     D  UserName                     10a   CONST                                                    
     D  JobNumber                     6a   CONST                                                    
     D  SQLStmt                   65535a   VARYING Options(*VarSize)                                
     D  SQLStatus                     5a                                                            

こちらが全文です。

     *******************************************************************************               
      *                                                                             *               
      *   CRTSQLRPGI OBJ(NETSQL/RTVJOBSQL) SRCFILE(NETSQL/QRPGLESRC) COMMIT(*NONE)  *               
      *   OBJTYPE(*MODULE) DBGVIEW(*SOURCE)                                         *               
      *                                                                             *               
      *******************************************************************************               
     H                                                                                              
      *                                                                                             
     D RtvJobSQL       PR                                                                           
     D  JobName                      10a   CONST                                                    
     D  UserName                     10a   CONST                                                    
     D  JobNumber                     6a   CONST                                                    
     D  SQLStmt                   65535a   VARYING Options(*VarSize)                                
     D  SQLStatus                     5a                                                            
      *                                                                                             
     D RtvJobSQL       PI                                                                           
     D  ParmJobName                  10a   CONST                                                    
     D  ParmUserName                 10a   CONST                                                    
     D  ParmJobNumber                 6a   CONST                                                    
     D  SQLStmt                   65535a   VARYING Options(*VarSize)                                
     D  SQLStatus                     5a                                                            
      *                                                                                             
     D CrtUsrspcP      PR              *                                                            
     D  Name                         20a                                                            
      *                                                                                             
     D RtvJobSts       PR                  EXTPGM('QUSRJOBI')                                       
     D  RcvVar                    65535a   Options(*VarSize)                                        
     D  RcvVarLen                    10i 0 Const                                                    
     D  FmtName                       8a   Const                                                    
     D  QualJobName                  26a   Const                                                    
     D  InternalJobID                16a   Const                                                    
     D  ErrorCode                          like(APIErr)                                             
     D  ResetPfrStat                  1a   Const                                                    
      *                                                                                             
     D JOBI0900        DS                  Qualified Based(usPtr)                                   
     D  NbrBytesRtn                  10i 0                                                          
     D  NbrBytesAvl                  10i 0                                                          
     D  JobName                      10a                                                            
     D  UsrName                      10a                                                            
     D  JobNbr                        6a                                                            
     D  InternalJobID                16a                                                            
     D  JobSts                       10a                                                            
     D  JobType                       1a                                                            
     D  JobSubType                    1a                                                            
     D  SvrMode                       1a                                                            
     D  rsvd                          1a                                                            
     D  OfsOpnCrs                    10i 0                                                          
     D  SizOpnCrs                    10i 0                                                          
     D  NbrOpnCrs                    10i 0                                                          
     D  OfsCurCrs                    10i 0                                                          
     D  LenCurCrs                    10i 0                                                          
     D  StsCurCrs                    10i 0                                                          
     D  CCSIDCurCrs                  10i 0                                                          
     D  RDBname                      18a                                                            
     D  SQLObj                       10a                                                            
     D  SQLLib                       10a                                                            
     D  SQLObjType                   10a                                                            
     D  rsvd2                         4a                                                            
     D  CumNbrFullOpn                20i 0                                                          
     D  CumNbrPsedOpn                20i 0                                                          
     D  OfsCurSQL                    10i 0                                                          
     D  LenCurSQL                    10i 0                                                          
      *                                                                                             
     D CursorInfo      DS                  Qualified Based(StartPosC)                               
     D   ObjName                     10a                                                            
     D   ObjLib                      10a                                                            
     D   ObjType                     10a                                                            
     D   SQLCurName                  18a                                                            
     D   SQLStmtname                 18a                                                            
      *                                                                                             
     D APIErr          DS                  Qualified                                                
     D  ErrSize                      10i 0 inz(%size(APIErr))                                       
     D  ErrLen                       10i 0 inz(0)                                                   
     D  ErrID                         7a                                                            
     D  rsvd                          1a                                                            
     D  ErrData                   32767a                                                            
      *                                                                                             
     D QualJobName     DS            26    Qualified                                                
     D  JobName                      10a                                                            
     D  UserName                     10a                                                            
     D  JobNumber                     6a                                                            
      *                                                                                             
     D pName           S             20a                                                            
     D usPtr           S               *                                                            
      *                                                                                             
     D RcvSize         S             10  0 INZ(16776704)                                            
      *                                                                                             
     D i               S              5  0                                                          
     D StartPosC       S               *                                                            
     D StartPosS       S               *                                                            
      *                                                                                             
     D HandleErr       PR                                                                           
      *                                                                                             
     D SQLCurName      S             18a                                                            
     D SQLStmtname     S             18a                                                            
      *                                                                                             
      /Free                                                                                         
                                                                                                    
          QualJobName.JobName = ParmJobName ;                                                       
          QualJobName.UserName = ParmUserName ;                                                     
          QualJobName.JobNumber = ParmJobNumber ;                                                   
                                                                                                    
          pName =    'JOBI0900  QTEMP     ' ;                                                       
          usPtr = CrtUsrspcP  (pName ) ;                                                            
                                                                                                    
          RtvJobSts( JOBI0900 :                                                                     
                      RcvSize :                                                                     
                   'JOBI0900' :                                                                     
                  QualJobName :                                                                     
                      *blanks :                                                                     
                       APIErr :                                                                     
                        '0' ) ;                                                                     
                                                                                                    
          if APIErr.ErrLEN <> 0 ;                                                                   
                                                                                                    
             handleErr() ;                                                                          
                                                                                                    
          else ;                                                                                    
                                                                                                    
             if JOBI0900.NBROPNCRS <> 0 ;                                                           
                                                                                                    
                StartPosC = %addr(JOBI0900) + (JOBI0900.OFSOPNCRS) ;                                
                                                                                                    
                for i = 1 to %dec(JOBI0900.NBROPNCRS) ;                                             
                   SQLCurName = CursorInfo.SQLCurName ;                                             
                   SQLStmtname = CursorInfo.SQLStmtname ;                                           
                   StartPosC = StartPosC + %size(CursorInfo) ;                                      
                endfor ;                                                                            
                                                                                                    
                StartPosS = %addr(JOBI0900) + (JOBI0900.OFSCURCRS) ;                                
                SQLStmt = %str(StartPosS:%dec(JOBI0900.LENCURCRS)) ;                                
                                                                                                    
                SELECT ;                                                                            
                   WHEN JOBI0900.StsCurCrs = 1 ;                                                    
                      SQLStatus = 'ACT' ;                                                           
                   WHEN JOBI0900.StsCurCrs = 2 ;                                                    
                      SQLStatus = 'INACT' ;                                                         
                   OTHER ;                                                                          
                      SQLStatus = %char(JOBI0900.StsCurCrs) ;                                       
                endSL ;                                                                             
                                                                                                    
             else ;                                                                                 
                                                                                                    
                SQLCurName = '*NONE' ;                                                              
                SQLStmt = '*NONE' ;                                                                 
                                                                                                    
             endIf ;                                                                                
                                                                                                    
             SQLStmt = %trimR(SQLStmt) ;                                                            
                                                                                                    
          endIf ;                                                                                   
                                                                                                    
          *inLR = *on ;                                                                             
          return ;                                                                                  
                                                                                                    
      /End-Free                                                                                     
      *                                                                                             
      *                                                                                             
     P HandleErr       B                                                                            
     D HandleErr       PI                                                                           
      *                                                                                             
      /Free                                                                                         
                                                                                                    
      /End-Free                                                                                     
      *                                                                                             
     P HandleErr       E                                                                            

[Top Pageに戻る]

Ads by TOK2