問題の提起: 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
結果が見づらいですね。。。
このテーブルはNAMEやOWNERなどのカラムは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では、EVMONNAMEとOWNERカラムの文字数を制限しています。これにより、結果がターミナルにおいて一行で表示され、読みやすくなります。
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を使ってカラムの長さを調節してあげましょう。