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