Uncategorized

Db2でSELECT文の表示カラムを見やすく変更する方法

問題の提起: SELECT文の結果が見づらい

Teratermなどのターミナルを使ってDb2にログインし、SELECT文を発行する際、カラムの長さが長すぎて表示が見にくいことはありませんか? 特に項目やカラム長が多いテーブルを調べるとき、結果が1行でも改行して表示されたり表示に問題が起こりがちです。

例えば、次のSYSCAT表をSELECTする例で見ていきましょう。

【テーブル構造の確認】

db2 => describe table syscat.eventmonitors
                    データ・タイ データ・   列の       スケ
列名                プ・スキーマ タイプ名   長さ       ール  NULL
------------------- --------- ------------- ---------- ----- ------
NAME                SYSIBM    VARCHAR              128     0 いいえ
OWNER               SYSIBM    VARCHAR              128     0 いいえ
OWNERTYPE           SYSIBM    CHARACTER              1     0 いいえ
TARGET_TYPE         SYSIBM    CHARACTER              1     0 いいえ
TARGET              SYSIBM    VARCHAR              762     0 いいえ
MAXFILES            SYSIBM    INTEGER                4     0 はい  
MAXFILESIZE         SYSIBM    INTEGER                4     0 はい  
BUFFERSIZE          SYSIBM    INTEGER                4     0 はい  
IO_MODE             SYSIBM    CHARACTER              1     0 はい  
WRITE_MODE          SYSIBM    CHARACTER              1     0 はい  
AUTOSTART           SYSIBM    CHARACTER              1     0 いいえ
DBPARTITIONNUM      SYSIBM    SMALLINT               2     0 いいえ
MONSCOPE            SYSIBM    CHARACTER              1     0 いいえ
EVMON_ACTIVATES     SYSIBM    INTEGER                4     0 いいえ
NODENUM             SYSIBM    SMALLINT               2     0 いいえ
DEFINER             SYSIBM    VARCHAR              128     0 いいえ
VERSIONNUMBER       SYSIBM    INTEGER                4     0 いいえ
MEMBER              SYSIBM    SMALLINT               2     0 いいえ
REMARKS             SYSIBM    VARCHAR              254     0 はい  

【Selectしてみる】

db2 => SELECT EVMONNAME, TARGET_TYPE, OWNER FROM SYSCAT.EVENTMONITORS

EVMONNAME                                                                                                                         TARGET_TYPE OWNER                                                                                                                            
--------------------------------------------------------------------------------------------------------------------------------  ----------- -------------------------------------------------------------------------------------------------------------------------------- 
DB2DETAILDEADLOCK                                                                                                                 F           DB2INST1                                                                                                                         
LOCKEVMON                                                                                                                         U           DB2INST1                                                                                                                         

結果が見づらいですね。。。

このテーブルはNAMEOWNERなどのカラムは128バイトの長さがあり、ターミナル上での表示が非常に見づらくなります。

解決策: SQLの工夫をして見やすく

Db2では、Oracleのcolumnコマンドに相当する直接的な方法はありませんが、SQLを工夫することで同様の結果を得ることができます。特にSUBSTR関数を使用してカラムの表示長を調整する方法が有効です。

【見やすくフォーマットするためのSQL】

db2 => SELECT SUBSTR(EVMONNAME,1,20) AS EVMON_NAME, TARGET_TYPE, SUBSTR(OWNER,1,10) AS ONR FROM SYSCAT.EVENTMONITORS

EVMON_NAME           TARGET_TYPE ONR       
-------------------- ----------- ----------
DB2DETAILDEADLOCK    F           YDBINST1  
LOCKEVMON            U           YDBINST1  

このSQLでは、EVMONNAMEOWNERカラムの文字数を制限しています。これにより、結果がターミナルにおいて一行で表示され、読みやすくなります。

Oracleでの類似操作

Oracleデータベースに詳しい方のために、Oracleで同じことを実現する方法も紹介します。Oracleではcolumnコマンドを使用してカラムの表示フォーマットを設定できます。

SQL> column EVMONNAME format a20
SQL> column OWNER format a10
SQL> SELECT EVMONNAME, TARGET_TYPE, OWNER FROM SYSCAT.EVENTMONITORS

まとめ

SELECT文の表示カラムを見やすくするためにはSUBSTRを使ってカラムの長さを調節してあげましょう。