SQL
oracle
SublimeText
SublimeText3
Sqlplus

Sublime Text 3でSQLを実行したい欲求と戦った話

はじめに

いろいろなテキストエディタがありますが、
私は会社の研修がきっかけでSublime Text(以下Sublime)を使用しています。

SQLエディタは普段OsqlEditを使用していますが、
ログに吐かれるSQLを整形⇒分析するのに使い勝手が悪いなと悶々としていました。

これはSublimeで整形から実行/挙動確認までを完結してやりたいという欲求と戦った話です。

環境

OS : windows
接続DB : oracle

導入手順

Package ControlからSQLToolsをインストール

SQLToolsというプラグインを使用することで実現することが可能
http://mtxr.github.io/SQLTools/
1. Ctrl+Shift+pでコマンドパレットを開く
2. installと入力しPackage Control:Install Packageを選択
3. sqltoolsと入力しSQLToolsをインストール
image.png

【SQLToolsの設定】

SQLToolsのインストールが終わったら実行ファイルとDB接続情報の設定

【実行ファイルの設定】
  • PreferencesPackage SettingsSQLToolsSettingsと進み設定を開く

image.png
 #最初はこんな感じなのでUser設定に一式コピー(下図、左側を右側に)
image.png

  • 実行ファイルのPathを設定

 User設定にコピーした"cli" :{}の中を編集し実行ファイルのPATHに書き換える。
 #今回はoracleを使用するので"sqlplus"の部分をsqlplus.exeのPATHに書き換え
 【注意】windowsのPATHは\ (バックススラッシュ)になるので/に直すかエスケープを意識しましょう

    "cli" : {
        "mysql"   : "mysql",
        "pgsql"   : "psql",
//        "oracle"  : "sqlplus",
        "oracle"  : "C:\\oraclexe\\app\\oracle\\product\\11.2.0\\server\\bin\\sqlplus.exe",
        "vertica" : "vsql",
        "sqsh"    : "sqsh",
        "firebird": "isql",
        "sqlite"  : "sqlite3"
    },

 以上で実行ファイルの設定は完了です。

【DB接続情報の設定】
  • PreferencesPackage SettingsSQLToolsConnectionsと進み設定を開く

 User設定のOracle接続情報を書き換え

    "Connection Oracle": {
      "type"    : "oracle",
      "host"    : "127.0.0.1",
      "port"    :  1521,
      "database": "dbname",
      "username": "anotheruser",
      "password": "password",
      "service" : "servicename",
      "encoding": "utf-8"
    },

 #ここで指定した値を使用してsqlplusを起動しています。
 以下、settingsに記載の引数定義

"args": "{username}/{password}@"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={host})(PORT={port})))(CONNECT_DATA=(SERVICE_NAME={service})))""

 以上でDB接続情報の設定は完了です。

動作確認

導入まで終わったら動作確認。

  1. Sublimeを再起動してCtrl+Shift+pでコマンドパレットを開く
  2. st:select connectionと入力しST:Select Connectionを選択
    image.png

  3. 登録したDBが表示されればOK。DBを選択しSublimeからsqlplusに接続完了。

以上でSublimeでSQLを触るための環境が完成です!

早速やってみよう!

・・・

image.png
思いっきり文字化けした( ꒪⌓꒪)
接続DBがS-JISだったので、UTF-8のSublimeとの相性が悪い。。。

いろいろ試した結果、環境変数触るといけるのではということで、、
image.png

◆1/23追記
プラグインのUpdateでオプション追加が可能になりました。
PreferencesPackage SettingsSQLToolsConnections
nls_langの設定で文字化けを解消できます!

    "Connection Oracle": {
      "type"    : "oracle",
      "host"    : "127.0.0.1",
      "port"    :  1521,
      "database": "dbname",
      "username": "anotheruser",
      "password": "password",
      "service" : "servicename",
      // nls_lang is optional
      "nls_lang": "american_america.al32utf8",
      "encoding": "utf-8"
    },

再起動して再実行!
image.png

無事日本語表示できました(๑˃̵ᴗ˂̵)و

参考

Sublime Text 3 で SQL を実行する方法 (SQLTools)
文字化けに関するトラブルに強くなる【基礎編】

おわりに

これでログから整形→分析→実行確認まで出来るようになりました!

  • Example

【ログ】こんなSQLを
image.png
【整形】ぱっと整形して
image.png
【分析】エラー箇所/修正箇所の特定・修正
【実行】SQLToolsでそのまま実行/挙動確認

osqleditを使わずSublimeで完結できるようになってすっきりです!
#ちなみに整形に使用しているのはuroboro​SQL Formatterです。

参考リンクで解決できる方が多いでしょうが、ところどころ戸惑ったので記事にしました。
他のデータベースでも同様に接続可能です。
Sublimeってほんとなんでもできますね( ✧Д✧) カッ!!