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がおすすめ