quickrun.vimを使って、OracleにSQL実行、見やすくCSVで結果表示する設定をまとめました。
Oracleの場合、単純にquickrunを使ってSQLファイルを実行すると、出力形式が酷く非常に見難くなってしまいます。これを回避するため、CSV形式に出力するテンプレートを定義しています。
また、接続対象のDBは切替できるように、接続文字列をquickrunの設定とは別に設定するようにしています。
前提
- quickrun.vimのインストールが終わっていること。NeoBundleなど、お好きなもので。
- Oracle(およびsqlplus)のインストールが終わっていること。簡易接続ネーミングが使える10g以降の想定で記載していますが、他のバージョンでも応用はできると思います。
vimrcの設定
SQLファイルに対するquickrunプラグインの設定を.vimrcに記述します。
.vimrc
letg:quickrun_config['sql'] = {
\ 'exec': '%c %o \@%s',
\ 'command': 'sqlplus',
\ 'cmdopt': '-S %{get(g:, "quickrun_oracle_conn", "/nolog")}',
\ 'hook/output_encode/encoding': 'sjis',
\ 'hook/eval/enable': 1,
\ 'hook/eval/template':
\ 'set echo off' . "\r" .
\ 'set linesize 1000' . "\r" .
\ 'set trimspool on' . "\r" .
\ 'set feedback off' . "\r" .
\ 'set colsep ","' . "\r" .
\ 'set heading on' . "\r" .
\ 'set underline off' . "\r" .
\ '%s',
\}
以下で設定値を解説します。
'exec': '%c %o \@%s'
sqlplus -S DB接続文字列 @SQLファイル
の形式で実行する雛形を定義しています。@
はquickrunに展開されてしまうので、\
でエスケープしています。
'command': 'sqlplus'
- 雛形の
%c
にsqlplus
が代入されます。
- 雛形の
'cmdopt': '-S %{get(g:, "quickrun_oracle_conn", "/nolog")}'
- 雛形の
%o
に代入されるコマンドオプションです。 -S
はメッセージおよびプロンプト・初期メッセージを抑制する、sqlplusのオプションです。%{
から}
の部分がg:quickrun_oracle_conn 変数
(後述)からDBの接続文字列を読み込む設定です。g:quickrun_oracle_conn 変数
は後で定義する想定なので、%{}
を使って実行時に評価します。g:quickrun_oracle_conn 変数
が定義されていない場合は/nolog
オプションを指定してログインなしで実行します。
- 雛形の
'hook/output_encode/encoding': 'sjis'
- アウトプットのエンコーディング設定です。ここではWindows想定で
sjis
を設定しています。自分の環境に合わせてください。
- アウトプットのエンコーディング設定です。ここではWindows想定で
'hook/eval/enable': 1
'hook/eval/template': (省略)
- CSV出力するための実行テンプレートをhookスクリプトで設定します。
- これによりSQLファイルの前に
set echo off
などのCSV形式で出力する設定が差し込まれます。
DB接続文字列の設定
対象のDBを接続する変数を設定します。
let g:quickrun_oracle_conn = 'user/pass@server/servicename'
上記をコマンドモードなどで実行して変数設定します。
私はlocalrc.vimを使って、フォルダごとに設定できる形にしています。
.vimrcに書いてもいいですが、対象のDBを変更するために.vimrcの再読み込みが必要になります。
QuickRun実行
SQLファイルを開いて、:QuickRun
で実行結果が表示されます。
SQLファイルは;
の区切り文字が必要です。
todo
- Alignta使って、CSVをより綺麗に整形するhookスクリプト書きたい。