テーブルのインデックス使用情報の取得 (V6R1 ILE/RPG)

テーブルのインデックス使用情報の取得 (RPG で API を使用して)」で作成したプログラムを、取得した内容をテーブルに書き込むように変更してみました。


書き込み用のテーブル

書き込み用に作成したテーブルは↓のようなものです。

         CREATE TABLE APITEST.IDXINFO
                 (TABLE_NAME     CHAR (30 ) NOT NULL WITH DEFAULT,
                  INDEX_NAME     CHAR (30 ) NOT NULL WITH DEFAULT,
                  "TYPE"         CHAR (11 ) NOT NULL WITH DEFAULT,
                  INDEX_TYPE     CHAR (1 )  NOT NULL WITH DEFAULT,
                  SIZE           DEC (20,0) NOT NULL WITH DEFAULT,
                  DATE_CREATED   CHAR (14 ) NOT NULL WITH DEFAULT,
                  DATE_REBUILD   CHAR (14 ) NOT NULL WITH DEFAULT,
                  LAST_USED_QRY  CHAR (14 ) NOT NULL WITH DEFAULT,
                  LAST_USED_STAT CHAR (14 ) NOT NULL WITH DEFAULT,
                  USE_COUNT      DEC (20,0) NOT NULL WITH DEFAULT,
                  STAT_USE_COUNT DEC (20,0) NOT NULL WITH DEFAULT,
                  LAST_USED_DATE CHAR (14 ) NOT NULL WITH DEFAULT,
                  DAYS_USED      DEC (10,0) NOT NULL WITH DEFAULT,
                  KEY_TIMESTAMP  TIMESTAMP  NOT NULL WITH DEFAULT)    ;

プログラム例

修正したプログラムは↓になります。

前回のプログラムではテーブル名、ライブラリー名、メンバー名の 3つの引数を取るようになっていたのですが、今回修正ついでにメンバー名については省略できるように変更してみました。

      *
      *     CREATE TABLE APITEST/IDXINFO
      *           (TABLE_NAME     CHAR (30 ) NOT NULL WITH DEFAULT,
      *            INDEX_NAME     CHAR (30 ) NOT NULL WITH DEFAULT,
      *            "TYPE"         CHAR (11 ) NOT NULL WITH DEFAULT,
      *            INDEX_TYPE     CHAR (1 )  NOT NULL WITH DEFAULT,
      *            SIZE           DEC (20,0) NOT NULL WITH DEFAULT,
      *            DATE_CREATED   CHAR (14 ) NOT NULL WITH DEFAULT,
      *            DATE_REBUILD   CHAR (14 ) NOT NULL WITH DEFAULT,
      *            LAST_USED_QRY  CHAR (14 ) NOT NULL WITH DEFAULT,
      *            LAST_USED_STAT CHAR (14 ) NOT NULL WITH DEFAULT,
      *            USE_COUNT      DEC (20,0) NOT NULL WITH DEFAULT,
      *            STAT_USE_COUNT DEC (20,0) NOT NULL WITH DEFAULT,
      *            LAST_USED_DATE CHAR (14 ) NOT NULL WITH DEFAULT,
      *            DAYS_USED      DEC (10,0) NOT NULL WITH DEFAULT,
      *            KEY_TIMESTAMP  TIMESTAMP  NOT NULL WITH DEFAULT)
      *
      *     CRTSQLRPGI OBJ(APITEST/RTVIDXINF2) SRCFILE(APITEST/QRPGLESRC)
      *                 COMMIT(*NONE) DBGVIEW(*SOURCE)
      *

     H DFTACTGRP(*NO)

     D RtvIdxInf2      PR
     D   File                        10A   const
     D   Library                     10A   const
     D   Member                      10A   const options(*nopass)
     D RtvIdxInf2      PI
     D   pFile                       10A   const
     D   pLibrary                    10A   const
     D   pMember                     10A   const options(*nopass)

     D GetIdxInfo      PR                  ExtPgm('QUSRMBRD')
     D   RcvVar                   65535A   options(*varsize)
     D   RcvVarLen                   10I 0 const
     D   Format                       8A   const
     D   QualFile                    20A   const
     D   Member                      10A   const
     D   Ovrd                         1A   const
     D   ErrorCode                32767A   options(*varsize:*nopass)
     D   FindMbr                      1A   const options(*nopass)

     D ErrorCode       ds                  qualified
     D   BytesProv                   10I 0 inz(%size(ErrorCode))
     D   BytesAvail                  10I 0 inz(0)
     D   MsgID                        7A
     D                                1A
     D   MsgDta                    1024A

     D MBRD0400        ds                  qualified
     D                                     based(p_RcvVar)
     D   BytesRtn                    10I 0
     D   BytesAvail                  10I 0
     D   Count                       10I 0
     D   Offset                      10I 0

     D IdxInfo         DS                  Based(p_IdxInfo)
     D                                     qualified
     D   Liblen                       5i 0
     D   Library                    258a
     D   Filelen                      5i 0
     D   File                       258a
     D   Memberlen                    5i 0
     D   Member                     258a
     D   CstType                     11a
     D                                9a
     D   isValid                      1a
     D   isHeld                       1a
     D                                6a
     D   CrtDate                     14a
     D   RBldDate                    14a
     D   LastQryUse                  14a
     D   LastStatUse                 14a
     D   UseCount                    20i 0
     D   StatUseCount                20i 0
     D   Sta2UseCount                20i 0
     D   Keys                        20i 0
     D   Size                        20i 0
     D   Key1Unq                     20i 0
     D   Key2Unq                     20i 0
     D   Key3Unq                     20i 0
     D   Key4Unq                     20i 0
     D   EstRBldSec                  10i 0
     D   DlydKeys                    10i 0
     D   OvFlCount                   10i 0
     D   CodeSize                    10i 0
     D   LFRdReqs                    20i 0
     D   PFRdReqs                    20i 0
     D   DaysUsed                    10i 0
     D   LastUsedDate                14a
     D   ResetDate                    8a
     D                               30a
     D   Sparse                       1a
     D   DrvdKey                      1a
     D   Partitioned                  1a
     D   Maint                        1a
     D   Recovery                     1a
     D   Type                         1a
     D   Unique                       1a
     D   SRTSeq                       1a
     D   SRTLib                      10a
     D   SRTTbl                      10a
     D   SRTLang                      3a
     D   SRTWeight                    1a
     D   PageSize                    10i 0
     D   KeyLen                      10i 0
     D   KeyCount                    10i 0
      * V5R4
     D*                              82a
     D*  KeyLst                    1024a   Varying
      * V6R1
     D   DECFround                    1a
     D   DECFwarn                     1a
     D   WHEREhasUDF                  1a
     D                               79a
     D   KeyNamesLen                  5i 0
     D   KeyNames                  1024a
     D   WHEREccsid                  10i 0
     D   WHERElen                     5i 0
     D   WHERE                     1024a
     D   TEXTccsid                   10i 0
     D   TEXTlen                      5i 0
     D   TEXT                        50a
     D   Owner                       10a
     D   OwnerFile                   10a
     D   OwnerFileLib                10a

     D varSize         S             10I 0
     D I               S             10I 0
     D IdxName         S             30a
     D TblName         S             30a
     D*IdxName         S            774a
     D member          S             10a   inz('*FIRST')

      /free

          *inlr = *on;

          if %parms() > 2 ;
             member = pMember;
          endif ;

          dou ( varSize >= MBRD0400.BytesAvail );

             if (p_RcvVar = *NULL);
                varSize = %size(MBRD0400);
             else;
                varSize = MBRD0400.BytesAvail;
                dealloc p_RcvVar;
             endif;

             p_RcvVar = %alloc(varSize);

             GetIdxInfo( MBRD0400
                      : varSize
                      : 'MBRD0400'
                      : pFile + pLibrary
                      : member
                      : *ON
                      : ErrorCode );

             if (ErrorCode.BytesAvail > 0);
                return;
             endif;

          enddo;

              TblName = %trimR(pLibrary) + '/' + %trimR(pFile) ;

          for i = 1 to MBRD0400.Count;

              p_IdxInfo = p_RcvVar + MBRD0400.Offset +
                        (i-1) * %size(idxInfo);

              IdxName = %trimR(%subst(idxInfo.Library:1:idxInfo.Liblen)) +
                  '/' + %trimR(%subst(idxInfo.FIle:1:idxInfo.Filelen)) ;

              exec SQL
              INSERT INTO APITEST/IDXINFO
                     VALUES(
                           :TblName,
                           :IdxName,
                           :idxInfo.CstType,       // 11a
                           :idxInfo.Type,          // 1a
                           :idxInfo.Size,          // 20i 0
                           :idxInfo.CrtDate,       // 14a
                           :idxInfo.RbldDate,      // 14a
                           :idxInfo.LastQryUse,    // 14a
                           :idxInfo.LastStatUse,   // 14a
                           :idxInfo.UseCount,      // 20i 0
                           :idxInfo.StatUseCount,  // 20i 0
                           :idxInfo.LastUsedDate,  // 14a
                           :idxInfo.DaysUsed,      // 10i 0
                           CURRENT_TIMESTAMP
                          ) ;

          endfor;

          dealloc p_RcvVar;
          return;

      /end-free

V6R1 での修正点など

今回は V6R1 でテストしてみたのですが、前回のプログラムはそのままでは動きませんでした。。
インフォメーションセンターを見て結果取得用のデータストラクチャに V6R1 で新しく追加された要素を加えてみても駄目、、
あれこれデバッグしていたところ、インフォメーションセンターには載っていない要素があることを発見してしまいました。(「Data space index owning file name」が最後の要素になっているのですが、この後に「Data space index owning file」の所属ライブラリーと思しきものが入ってきます。これを追加するとプログラムが正常に動くようになりました。[2008/12/24])

[Top Pageに戻る]

Ads by TOK2