SQLの整形についてまとめています
SQLの整形ツールのオンライン版・オフライン版
SQLの整形をおこなうメリット
システム開発時に、SQL文でエラーが発生した場合にSQL文の整形をおこなうとエラーが特定しやすくなります。また、整形することでSQLソースコードの可読性をあげて、バグの発生を防ぐという側面もあります。
しかし、複数人が関わるシステム開発では、インデントにタブを使うか空白を使うか、改行はandやorの前か後か、カンマは行頭か行末かなど、個人によって「正しい整形」は異なります。そこで、開発チーム共通で同一の整形ツールを使用することでSQLの不一致を防ぐことができます。
以下の暗号のような複雑なSQLを整形してみましょう。一見するだけでは、何が何やらわかりませんね。
select i.obj#,i.samplesize,i .dataobj#,nvl( i.spare1,i.intcols),i.spare6,dec ode(i.pctthres$,null,null,mod(trunc(i.pctthres$/25 6),256)),ist.cachedblk,ist.cachehit,ist.logicalrea d from ind$ i, ind_stats$ ist, (select enabled, mi n(cols) unicols,min(to_number(bitand(defer,1))) de ferrable#,min(to_number(bitand(defer,4))) valid# f rom cdef$ where obj#=:1 and enabled > 1 group by e nabled) c where i.obj#=c.enabled(+) and i.obj# = i st.obj#(+) and i.bo#=:1 order by i.obj#
オンラインのSQL整形サイト、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#
インデントや適切な箇所に改行が入り見やすくなりました。サブクエリを使ったselect文だったんですね。
SQLの整形版にはウェブで使えるオンライン版と、エディタやDB管理ツールに組み込まれているオフライン版があります。オンライン版・オフライン版ともにメリットとデメリットがあります。
SQLの整形ツールオンライン版
オンライン版のSQL整形ツールのメリットは、こまめに更新されて整形機能が高いことです。デメリットは、インターネットに接続していることが前提なので、インターネットが繋がっていないと使えない点です。
【関連記事】
▶SQL formatter オンラインで使える無料整形ツール 3選
2021年時点で特におすすめのオンライン版SQL整形ツールは以下の2つです。
Instant SQL Formatterは、インタフェースが英語表示ですが、整形機能はダントツ。どんなSQLを整形させても文句のない結果を返してきます。好みに応じて改行タイミングなどを変更することも可能です。2019年6月が最終更新日になっていました。
SQLフォーマッター For WEBは日本語インタフェースで、整形機能もInstant SQL Formatterに次ぐ高性能。試した限りでは、1行コメント「//」が行頭始まりと行途中始まりのものが混じっていた場合の扱いがうまくいきませんでした。それでも、普通に使う分には問題ない性能だと思います。最終更新日は2021年3月。今後もメンテされていくようです。
SQLの整形ツールオフライン版
SQL整形ツールのオフライン版のメリットは、ネットに繋がっていなくても使える点。しかし、オンライン版に比べると整形機能は物足りないことが多く、複雑なSQLになるとうまく整形できないこともあります。
【関連記事】
▶SQL 整形ツール 美しいコードが出力できるテキストエディタはどれ?
情報漏えい等を防ぐために、インターネットからは遮断されている開発環境もありますので、SQL整形ツールはオフライン版をつかわざるを得ないケースもあります。おすすめできるのは、SQL Developer、Visual Studio Code、A5:SQL Mk-2の整形機能。
SQL Developerは、Oracleが提供しているOracle向けのデータベース管理ツールです。SQLの編集や整形、実行だけではなくOracleデータベースの管理機能も備えています。ターゲットになるデータベースがOracleなら検討の価値ありでしょう。整形性能は普通。わざと難解なSQLを投入しなければ、そこそこの形に整形してくれます。
【関連記事】
▶SQL DeveloperでSQLを見やすく整形する方法を解説!
Visual Studio Code(VS Code)は、マイクロソフトが無料で提供している開発用エディタ。Windows系システムのプログラムのコーディングに使われることが多いです。対象言語をSQLに切り替えることで、SQLの整形も可能。
関連)Visual Studio Code – コード エディター | Microsoft Azure
開発のエディタとしてVS Codeを使っている場合、SQLの整形のために別ツールを立ち上げなくて良い点がメリット。整形性能は、「そこそこ」です。SQLの整形をおこなうためには、対象言語をSQLに切り替える必要がありますが、そのひと手間をなくすために有志がMODを提供してくれています。
関連)VSCodeでSQLをフォーマットしたいよ – Qiita
A5:SQL Mk-2は、多彩なデータベースに対応するフリーのデータベース管理ツール。USBメモリに入れて持ち歩けるポータブル仕様で、ER図作成機能など高級ソフトなみの高機能を備えています。整形機能は普通で、難解なSQLでなければ整形できます。
関連)A5:SQL Mk-2 – フリーのSQLクライアント/ER図作成ソフト (松原正和)
まとめ
複数人でおこなうシステム開発でSQLを扱う場合、SQL整形ツールを導入するのは必須と言えるでしょう。
- SQLの整形ツールにはオンライン版とオフライン版がある
- オンラインの整形ツールは整形性能が高いが、ネット接続が前提
- オフライン版の整形ツールはネットに繋がなくても使えるが、整形性能はオンライン版よりも劣る