SQL*Plus 內建的緩衝區編輯功能(LIST、CHANGE、INPUT、DEL)僅適合簡單單行修改。撰寫複雜 PL/SQL 區塊、長查詢或需版本控管時,外部編輯器(如 vi、vim、notepad++)提供語法高亮、搜尋取代、撤銷重做等專業功能,大幅提升開發效率。
SQL> DEFINE _EDITOR = 'vi'
永久生效: 將上述指令加入 $ORACLE_HOME/sqlplus/admin/glogin.sql(全域)或 ~/login.sql(使用者層級)。
SQL> COL file_name FOR A45
SQL> COL tablespace_name FOR A10 HEADING 'TBS_NAME'
SQL> COL current_scn FOR 999999999999
SQL> SELECT a.file_name, a.tablespace_name, b.current_scn
FROM dba_data_files a, v$database b
WHERE a.tablespace_name = 'USERS';
SQL> SAVE me.sql
Created file me.sql
SQL> HOST cat me.sql
SELECT a.file_name, a.tablespace_name, b.current_scn
FROM dba_data_files a, v$database b
WHERE a.tablespace_name = 'USERS'
SQL> EDIT me.sql
此時進入 vi 介面,可進行:
:%s/USERS/SYSAUX/g:wqSQL> GET me.sql
SQL> /
或直接 @me.sql 執行腳本檔。
SQL> EDIT
無參數 EDIT 會將「最近一次執行的 SQL」載入編輯器,修改存檔後自動回寫緩衝區,輸入 / 即可執行新版本。
SQL> DEFINE _EDITOR = 'notepad++ -multiInst -nosession'
-multiInst 允許多實例,-nosession 不載入上次工作階段,適合 SQL*Plus 呼叫。
| 問題 | 原因 | 解決 |
|---|---|---|
SP2-0678: Editor not found | 編輯器路徑不在 PATH 中 | 設定完整路徑:DEFINE _EDITOR = 'C:\Program Files\Notepad++\notepad++.exe' |
| vi 開啟後無法輸入 | 未進入插入模式 | 按 i 進入插入模式,Esc 返回正常模式 |
| 編輯後執行仍是舊 SQL | 未重新載入緩衝區 | 執行 GET filename 或再次 EDIT |
.sql 檔,納入 Git 版控SAVE 備份原 SQL,便於回滾