オブジェクト名とタイプだけを高速に取得する (V5R4)

オブジェクトの情報を得るためには DSPOBJD コマンドが定番ですが、やはり対象オブジェクトが多くなってくるとけっこう負荷もしくは時間がかかります。

名前だけでいいからもっと早く結果がほしい、という状況はありませんか??

ということで、オブジェクトの名前・所属ライブラリー・種類だけにしぼって情報を早く取ってくるツールを今回は紹介します。(知り合いの人がくれました)

      *                                                                                             
      *  CREATE TABLE OBJLST                                                                        
      *  (OBJECT CHAR (10 ) NOT NULL WITH DEFAULT,                                                  
      *   LIB CHAR (10 ) NOT NULL WITH DEFAULT,                                                     
      *   OBJTYPE CHAR (8 ) NOT NULL WITH DEFAULT,                                                  
      *   ROW_TIMESTAMP TIMESTAMP NOT NULL WITH DEFAULT)                                            
      *                                                                                             
      *  CRTSQLRPGI OBJ(GETOBJNAM) SRCFILE(QRPGLESRC)                                               
      *             COMMIT(*CS)                                                                     
      *             OBJTYPE(*MODULE) DBGVIEW(*SOURCE)                                               
      *                                                                                             
      *  CRTPGM PGM(GETOBJNAM) MODULE(GETOBJNAM CRTUSRSPCP)                                         
      *                                                                                             
     D GetObjNam       PR                                                                           
     D  obj                          10a                                                            
     D  lib                          10a                                                            
     D  objType                      10a                                                            
      *                                                                                             
     D GetObjNam       PI                                                                           
     D  obj                          10a                                                            
     D  lib                          10a                                                            
     D  objType                      10a                                                            
      *                                                                                             
     D CrtUsrspcP      PR              *                                                            
     D  Name                         20a                                                            
      *                                                                                             
     D GetObjInfo      Pr                  ExtPgm( 'QUSLOBJ' )                                      
     D  pUsrspcName                  20a   Const                                                    
     D  pFormatName                   8a   Const                                                    
     D  pObjLib                      20a   Const                                                    
     D  pObjType                     10a   Const                                                    
     D  ErrorCode                          like(APIErr)                                             
      *                                                                                             
     D GenericHeader   DS                  Qualified Based(usPtr)                                   
     D  userarea                     64a                                                            
     D  size                         10i 0                                                          
     D  releaselevel                  4                                                             
     D  formatname                    8                                                             
     D  APIused                      10                                                             
     D  DateCreated                  13                                                             
     D  InforSts                      1                                                             
     D  sizeUsed                     10i 0                                                          
     D  offsetInput                  10i 0                                                          
     D  sizeInput                    10i 0                                                          
     D  offsetHeader                 10i 0                                                          
     D  sizeHeader                   10i 0                                                          
     D  offsetList                   10i 0                                                          
     D  sizeList                     10i 0                                                          
     D  numberList                   10i 0                                                          
     D  sizeEntry                    10i 0                                                          
     D  CCSID                        10i 0                                                          
     D  cntryID                       2                                                             
     D  langID                        3                                                             
     D  subsetInd                     1                                                             
     D  rsvd                         42                                                             
      *                                                                                             
     D jlPtr           S               *                                                            
     D OBJL0100        DS                  Qualified Based(jlPtr)                                   
     D  ObjName                      10a                                                            
     D  LibName                      10a                                                            
     D  ObjType                      10a                                                            
      *                                                                                             
     D pName           S             20a                                                            
     D usPtr           S               *                                                            
      *                                                                                             
     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 i               S              5  0                                                          
     D ObjLib          S             20a                                                            
      *                                                                                             
     D RcvSize         S             10  0 INZ(16776704)                                            
      *                                                                                             
     D HandleErr       PR                                                                           
      *                                                                                             
      /Free                                                                                         
                                                                                                    
              %SubSt(ObjLib: 1:10) =  obj ;                                                         
              %SubSt(ObjLib:11:10) =  lib ;                                                         
                                                                                                    
              pName =    'GETOBJNAM QTEMP     ' ;                                                   
              usPtr = CrtUsrspcP  (pName ) ;                                                        
                                                                                                    
              GetObjInfo ( pName                                                                    
                          :'OBJL0100'                                                               
                          :ObjLib                                                                   
                          :ObjType                                                                  
                          :APIErr ) ;                                                               
                                                                                                    
              If APIErr.ErrLEN <> 0 ;                                                               
                                                                                                    
                HandleErr() ;                                                                       
                return ;                                                                            
                                                                                                    
              endif ;                                                                               
                                                                                                    
              If GenericHeader.numberList = 0 ;                                                     
                                                                                                    
                return ;                                                                            
                                                                                                    
              endif ;                                                                               
                                                                                                    
              jlPtr = usPtr + GenericHeader.offsetList ;                                            
                                                                                                    
              for i = 1 to GenericHeader.numberList ;                                               
                                                                                                    
                exec SQL                                                                            
                   INSERT INTO OBJLST                                                        
                     VALUES(                                                                        
                           :OBJL0100.objnamE,                                                       
                           :OBJL0100.libname,                                                       
                           :OBJL0100.objtype,                                                       
                           CURRENT_TIMESTAMP                                                        
                          ) ;                                                                       
                                                                                                    
                jlPtr =  jlPtr + GenericHeader.sizeEntry ;                                          
                                                                                                    
              endfor ;                                                                              
                                                                                                    
              exec SQL  COMMIT ;                                                                    
                                                                                                    
              *inLR = *on ;                                                                         
              return ;                                                                              
                                                                                                    
      /End-Free                                                                                     
      *                                                                                             
      *                                                                                             
     P HandleErr       B                                                                            
     D HandleErr       PI                                                                           
      *                                                                                             
      /Free                                                                                         
                                                                                                    
      /End-Free                                                                                     
      *                                                                                             
     P HandleErr       E                                                                            

オブジェクトの情報を取得するためには QUSLOBJ という API が使えます。

説明は…あまり難しいことはありませんね。

API 呼び出しのとてもシンプルなサンプルになっていると思いますので、System API を使ったプログラムを作るときの参考にになると思います。

[Top Pageに戻る]

Ads by TOK2