Oracle SQL*Plus で直前(最後)に実行した SQL をエディタで編集する方法

Oracle SQL*Plus で直前(最後)に実行した SQL をエディタで編集する方法

SQL*Plus で SQL を実行したが、ちょっとだけ条件を変えて SQL を実行したいという場合には、最初から SQL を書き直すか、別のエディタで SQL を書いたものを変更して SQL*Plus に貼り付けて実行したりすることも可能ですが、SQL*Plus の中でエディタを使って書き換えられたほうが圧倒的に便利です。




SQL*Plus から起動するエディタを設定する

SQL*Plus で SQL を編集するためには、まず使いたいエディタを SQL*Plus に伝える必要があります。環境によって設定値が異なりますので、Windows と Linux でのエディタの設定方法を記載します。

SQL*Plus でログイン後、DEFINE という命令を使って _EDITOR 変数にエディタの名前を書くことで、起動するエディタを指定することが出来ます。

Windows の場合 (ノートパッドを指定)
DEFINE _EDITOR=notepad

Linux の場合 (vi エディタを指定)
DEFINE _EDITOR=vi

SQL*Plus の中でエディタを起動する

前述の _EDITOR 変数を定義したら、次に SQL を実行します。その後 EDIT コマンドを実行すると、エディタが起動して直前に実行した SQL が書かれた状態になります。

起動したエディタの中で SQL を編集して保存すると、SQL は afiedt.buf というバッファ・ファイルに記録されるとともに、SQL*Plus は修正後の SQL を記憶してくれます。そして再実行するには / (スラッシュ) を入力してエンターキーを押せば再実行されます。

以下では最初に現在の日時を SYSDATE 関数を使って取得しています。その後 EDIT コマンドを実行して明日の日時 (SYSDATE + 1) にエディタの中で SQL を書き換え、/ (スラッシュ) で変更後の SQL を実行しています。

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
-------------------
11/16/2017 16:47:02

SQL> EDIT
Wrote file afiedt.buf
  1* SELECT SYSDATE + 1 FROM DUAL

SQL> /

SYSDATE+1
-------------------
11/17/2017 16:54:49


なお EDIT コマンドの省略形である ED でも同じようにエディタを起動することが出来ます。また大文字小文字は関係ありませんので、edit あるいは ed と入力してもエディタが起動されます。

このコマンドを使うことで SQL*Plus から離れずに SQL の条件を書き換えて実行することが出来るようになります。