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 の条件を書き換えて実行することが出来るようになります。