問題の提起: 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を使ってカラムの長さを調節してあげましょう。