ablog

不器用で落着きのない技術者のメモ

SQL*Plus で bash のようにカーソルキー(↑、↓)で履歴を呼出したり、Tabキーで自動補完したりする方法

SQL*Plus on Linuxbash のようにカーソルキー(↑、↓)で履歴を呼出したり、Tabキーで自動補完したりする方法を紹介します。
以前書いた sqlplus で bash みたいにヒストリを呼び出したりできたらいいな - ablog と同じような内容ですが、Oracle Database がインストールされていない Linux マシンに Oracle Instant Client と rlwrap をインストールしたので手順をメモっておきます。

使用感はこんな感じです

こんな感じで、履歴を呼出したり、Tab で自動補完したりできるようになります。

[yazekats@yazekats-linux ~]$ sqlplus scott/tiger@dbserver:1521/orcl
SQL> set pagesize 500
SQL> set linesize 200
SQL> SE  ← 「SE」と入力して[Tab]キーを押すと候補が表示される
SELECT   SESSION
SQL> SELECT  ← 「SEL」まで入力して[Tab]キーを押すと自動補完される
SQL> SELECT * F  ← 「F」まで入力して[Tab]キーを押すと候補が表示される
FILE   FLOAT  FROM
SQL> SELECT * FROM  ← 「FR」まで入力して[Tab]キーを押すと自動補完される
SQL> SELECT * FROM DUAL;

D
-
X

SQL> set pagesize 500  ← [][]キーを押すと入力履歴が呼出される
SQL>
(reverse-i-search)`': ← [Ctrl] + [r]を押す
(reverse-i-search)`S': SELECT * FROM DUAL;  ←「S」と入力すると入力履歴から検索してヒットした「SELECT * FROM DUAL;」が表示される
SQL> SELECT * FROM DUAL;  ← Enter」キーを押すとSQLが実行される

D
-
X


インストールと設定手順は以下の通りです。

インストール

readline-devel をインストールする
[root@yazekats-linux ~]# yum install readline-devel
rlwrap をインストールする
[root@yazekats-linux ~]# cd /usr/local/src/
[root@yazekats-linux src]# wget http://utopia.knoware.nl/~hlub/rlwrap/rlwrap-0.37.tar.gz
[root@yazekats-linux src]# make
[root@yazekats-linux src]# make install
Oracle Instant Client をインストールする
[yazekats@yazekats-linux software]$ unzip instantclient-basic-linux.x64-11.2.0.4.0.zip
[yazekats@yazekats-linux software]$ unzip instantclient-sqlplus-linux.x64-11.2.0.4.0.zip
[yazekats@yazekats-linux software]$ mv instantclient_11_2 /opt/oracle/

設定

.bash_profile と .bashrc を編集する
  • .bash_profile の PATH に Instant Client のパスを追記し、LD_LIBRARY_PATH と NLS_LANG を追記する。
PATH=$PATH:$HOME/bin:/sbin:/usr/sbin:/opt/oracle/instantclient_11_2

...

export LD_LIBRARY_PATH=/opt/oracle/instantclient_11_2
export NLS_LANG=American_America.AL32UTF8
  • .bashrc に alias を追記する。
alias sqlplus='rlwrap /opt/oracle/instantclient_11_2/sqlplus'
辞書ファイルをダウンロードする
[root@yazekats-linux ~]# cd /usr/local/share/rlwrap/completions
[root@yazekats-linux completions]# wget http://www.linuxification.at/download/rlwrap-extensions-V11-0.05.tar.gz
[root@yazekats-linux completions]# tar xfvz rlwrap-extensions-V11-0.05.tar.gz

環境

今回使った環境は以下の通り。Oracle Database はインストールされていません。

[yazekats@yazekats-linux ~]$ cat /etc/issue
Oracle Linux Server release 6.4
Kernel \r on an \m

[yazekats@yazekats-linux ~]$ uname -r
2.6.39-400.17.1.el6uek.x86_64

参考