Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

オフラインで使えるSQL整形ツールを比較しました。

開発現場では、オフラインで使えるSQL整形ツールが求められることがあります。今回は、VisualStudioCode、秀丸エディタ、SAKURAエディタのプラグインやマクロを使ったSQL整形について比較してみます。

なお、整形対象のSQLには、以前紹介したオンラインSQL整形ツール「Instant 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#

ギッチリと1行につめ込まれた、関数やサブクエリが入り混じった複雑極まるSQLです。

【関連記事】
SQL formatter オンラインで使える無料整形ツール 3選

オフラインSQL整形ツールの比較

visual studio codeはPL/SQLモードが優秀

マイクロソフト社製のソースコードエディタです。無料でダウンロードして使用可能です。

参考)Visual Studio Code – コード エディター 公式サイト

今回は、マーケットプレイスのSQL Formatterを使います。

参考)SQL Formatter – Visual Studio Marketplace

サンプルSQLを整形します。エディタ上でALT+SHIFT+Fで整形できます。

結果は、こうなりました。

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の後ろに改行が入っただけです。

ところが、設定を少し変えるだけで見違える結果が出ます。

Ctrl+SHIFT+Xで拡張機能一覧を呼び出し、SQL Formatterの「拡張機能の設定を構成します」から、pl/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#

1行が長くなりそうな関数では適度に改行を入れ、サブクエリも見やすく整形するなど、非の打ち所がない整形結果です。

PL/SQLモードをデフォルトにすれば良いのでは、と思うほどの出来のよさ。

秀丸エディタは、行頭にカンマが来る

秀丸エディタには、作者の秀まるおさんご本人が作成した、SQL整形プラグインがあります。

秀まるおのホームページ(サイトー企画)-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#

とても見やすいのですが、行頭にカンマが来るのは、好みが別れるところでしょう。

SAKURAエディタは、多重カッコの整形がやや苦手

SAKURAエディタには、「定番」と言われるレベルの有名なSQL整形マクロはありませんでした。

比較的新しい、こちらのマクロで整形してみます。

参考)SakuraEditorマクロでXML/JSON/CSS/SQLを整形するよ – Qiita

キーマクロとして読み込み、キーマクロの実行(Shift+Ctrl+L)で整形実行です。

整形結果はこうなりました。

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」や「FROM」などのキーワードを大文字化する点と、関数で使われる多重カッコを展開しすぎる点が気になりますが、整形品質としては充分でしょう。

ただ、個人の方がサンプル的に作成されたものなので、毎回整形種別(XML / JSON / CSS / SQL)を聞かれるなど使い勝手が良くない点もあります。

とは言っても、シンプルなコードで作られているため、好きなようにカスタマイズするのも難しくはないでしょう。

サクラエディタユーザにとっては、非常にありがたい情報です。

まとめ SQL整形ツールはVSCODEが優秀

複雑なSQL整形に強いのはVisual Studio Codeでした。

ポテパンダの一言メモ
  • visual studio codeは、PL/SQLで使うと整形性能が優秀
  • 秀丸エディタは、カンマが行頭に来る
  • サクラエディタは、多少気になる点はあるが及第点

とは言え、秀丸エディタ、サクラエディタが極端に劣っているというわけでもありません。手に馴染んだテキストエディタにSQL整形機能を持たせたいというあなたは、チェックしてみてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。