IBM i で同じ名前のソースメンバーが他のライブラリー/ファイルに存在するか調査したい
Question
ソースファイルが色々なライブラリーに存在しており、同じ名前のソースメンバーが存在しています。
ソースメンバーを整理する為、同じ名前のソースメンバーがどのライブラリーに存在するのかを検索(確認)する方法はありますでしょうか。
Answer
ソースメンバー情報を検索するには、「QSYS2.SYSMEMBERSTAT」と「QSYS2.SYSFILES」ビューを使用する事で可能です。
「SYSMEMBERSTAT view」
https://www.ibm.com/docs/en/i/7.4.0?topic=services-sysmemberstat-view
「QSYS2.SYSFILES」
https://www.ibm.com/docs/ja/i/7.5.0?topic=services-sysfiles-view
※このビューを使用する為の前提グループPTFレベル(各OSのグループPTF DB2 for IBM i レベル)
Db2 for IBM i | |
V7.6 | SF99960 level 1 |
V7.5 | SF99950 level 7 |
V7.4 | SF99704 level 28 |
→ グループPTFレベルは WRKPTFGRP コマンドでご確認ください。 |
-
まず、下記SQLを実行しソースメンバーの情報DBを作成します。
下記SQLを実行し、ライブラリーBELLTESTにファイルMYSRCSRCHを作成します。
CREATE OR REPLACE VIEW BELLTEST.MY_SOURCE_SEARCH FOR SYSTEM NAME "MYSRCSRCH" (LIBRARY,FILE,MEMBER,TYPE,ROWS,CREATED,LAST_CHANGED,LAST_UPDATED,MEMBER_TEXT) AS SELECT A.SYSTEM_TABLE_SCHEMA, A.SYSTEM_TABLE_NAME, A.SYSTEM_TABLE_MEMBER, A.SOURCE_TYPE, TO_CHAR(A.NUMBER_ROWS,'999G999'), TO_CHAR(A.CREATE_TIMESTAMP,'YYYY-MM-DD HH.MI.SS'), TO_CHAR(A.LAST_CHANGE_TIMESTAMP,'YYYY-MM-DD HH.MI.SS'), TO_CHAR(A.LAST_SOURCE_UPDATE_TIMESTAMP,'YYYY-MM-DD HH.MI.SS'), A.TEXT_DESCRIPTION FROM QSYS2.SYSMEMBERSTAT A, QSYS2.SYSFILES B WHERE (A.SYSTEM_TABLE_SCHEMA,A.SYSTEM_TABLE_NAME) = (B.SYSTEM_TABLE_SCHEMA,B.SYSTEM_TABLE_NAME) AND B.FILE_TYPE = 'SOURCE' ;
-
作成されたDBより、対象のメンバー名がどのライブラリーにあるかを検索します。
※以下ではメンバー名「QSTRUP」を対象としています。
SELECT * FROM BELLTEST.MY_SOURCE_SEARCH WHERE FILE = 'QCLSRC' AND MEMBER LIKE 'QSTRUP%' ORDER BY LIBRARY,FILE,MEMBER
この例では、ソースファイル名がQCLSRC内にあるメンバー名を検索しましたが、ソースファイル名が曖昧な時(例えば、QCLSRC, QCLPSRC, QCLLESRCなど)には、2行目の WHERE FILE = 'QCLSRC' の部分を WHERE FILE LIKE 'QCL%' へ変更すると、ファイル名がQCLで始まるソースファイル内を検索します。
よって、WHERE FILE LIKEを使用すればソースファイル名が曖昧でも検索する事も可能です。
時々、テストのために別のライブラリーにソースメンバーをコピーし、そのままにしてしまったなどでソース管理があいまいになってしまうことがあるかもしれません。
この際に、メンバーの整理をしてみてはいかがでしょうか。
by . あすと