SQLのformatter(整形ツール)についてまとめています。


SQLのformatterは、コードを見やすく整形してくれるツール
SQL formatterは、整形ツールの一種で、複雑なSQLを見やすく整形してくれます。以下のようなSQLを整形してみましょう。
- SELECT i.obj#, i.samplesize, i.dataobj#, Nvl(i.spare1,
- i.intcols), i.spare6, Decode(i.pctthres$, NULL,
- NULL, MOD(Trunc(i.pctthres$ / 256), 256)), ist.cachedblk,
- ist.cachehit, ist.logicalread FROM ind$ i,
- ind_stats$ ist, (SELECT enabled, Min(cols)
- unicols, Min(To_number(Bitand(defer, 1)))
- deferrable#, Min(To_number(Bitand(defer, 4)))
- valid# FROM cdef$ WHERE obj# = :1 AND enabled >
- 1 GROUP BY enabled) c WHERE i.obj# = c.enabled(+)
- AND i.obj# = ist.obj#(+) AND i.bo# = :1 ORDER
- BY i.obj#
整形には、Instant SQL Formatterというオンラインツールを使用しました。
結果は、以下のようになります。サブクエリなどを使った入れ子も完璧に解釈されて、整形されています。
- SELECT i.obj#,
- i.samplesize,
- i.dataobj#,
- Nvl(i.spare1, i.intcols),
- i.spare6,
- Decode(i.pctthres$, NULL, NULL,
- MOD(Trunc(i.pctthres$ / 256), 256)),
- ist.cachedblk,
- ist.cachehit,
- ist.logicalread
- FROM ind$ i,
- ind_stats$ ist,
- (SELECT enabled,
- Min(cols) unicols,
- Min(To_number(Bitand(defer, 1))) deferrable#,
- Min(To_number(Bitand(defer, 4))) valid#
- FROM cdef$
- WHERE obj# = :1
- AND enabled > 1
- GROUP BY enabled) c
- WHERE i.obj# = c.enabled(+)
- AND i.obj# = ist.obj#(+)
- AND i.bo# = :1
- ORDER BY i.obj#
【関連記事】
▶SQL formatter オンラインで使える無料整形ツール 3選
この整形ツールは、オンライン(ブラウザにコピペで利用できるネット上のサービス)なのでネットに接続した環境でしか使うことができません。しかし、オンラインの整形ツールは日々進化し続けていて、バグ・不具合報告なども反映されて、頻繁にアップデートされるため、高機能な整形ツールに仕上がっています。
整形時に、SQLのキーワードやテーブル名、関数名の1文字目を大文字にするとか、カンマを行末にするとか、整形上の細かい設定も可能ですし、MySQL、SQL Server、Oracle、DB2などDBMSごとの文法の違いも指定可能。SQLだけではなく、PHPやJavaなどへの埋め込み用コードも出力可能です。
オンラインのSQL formatterとしては、Instant SQL Formatterをブックマークしておけば間違いないでしょう。
オフラインのSQL formatter
しかし、開発現場ではネット接続が許可されていない環境もあります。そんな場合に役立つのがオフラインで利用可能な整形ツール。
中でも、MicrosoftのVisual Studio Codeは優秀です。
上記のオンラインのSQL formatterで使った複雑なSQLを整形してみましょう。
- select
- i.obj #,
- i.samplesize,
- i.dataobj#,
- nvl(i.spare1, i.intcols),
- i.spare6,
- decode(
- i.pctthres$,
- null,
- null,
- mod(trunc(i.pctthres$ / 256), 256)
- ),
- ist.cachedblk,
- ist.cachehit,
- ist.logicalread
- from
- ind$ i,
- ind_stats$ ist,
- (
- select
- enabled,
- min(cols) unicols,
- min(to_number(bitand(defer, 1))) deferrable#,
- min(to_number(bitand(defer, 4))) valid#
- from
- cdef$
- where
- obj# = :1
- and enabled > 1
- group by
- enabled
- ) c
- where
- i.obj# = c .enabled(+)
- and i.obj# = ist.obj#(+)
- and i.bo# = :1
- order by
- i.obj#
【関連記事】
▶SQL 整形ツール 美しいコードが出力できるテキストエディタはどれ?
オンラインの整形ツールとは、改行のタイミングがやや異なる部分もありますが、整形結果としては満点と言えるでしょう。実は、オフライン整形ツールは、テキストエディタに付属の機能などを試用したところ、VisualStudioCode以外はイマイチな結果でした。複雑なSQLを指定すると、SQLの解釈間違いなどを起こして、整形結果がおかしくなってしまうんですね。
圧倒的な利用者を誇るVisualStuioCodeだからこそ、整形機能もここまでバージョンアップして高性能になっているのかも知れません。
オフラインのSQL formatterとしては、VSCODE(Visual Studio Code)が一押しです。
まとめ

- SQL formatterは、SQLコードを整形して見やすくするツール
- オンラインのSQL formatterは、Instant SQL formatterがおすすめ
- オフラインのSQL formatterは、Visual Studio Codeがおすすめ