1.rlwrap工具的下载及安装
rlwrap工具的下载及安装方法可以参考
rlwrap for Command Line History and Editing in SQL*Plus and RMAN on Linux
2.rlwrap工具的参数说明
通过上述步骤安装好rlwrap工具以后,只能实现命令历史记录的上下翻找功能,而无法实现如下几个功能
命令历史记录的去重功能
SQL语句中的关键字自动补全功能
文件目录的自动补全功能
要实现上述三个功能,就需要增加额外的命令行参数来实现,具体参数及描述如下
-D2:此参数可以实现命令历史记录的去重功能,在SQL PLUS中输入n次select * from dual;语句并多次执行之后,在shell ~/.sqlplus_history
文件中只保存一条记录,这样可以有效的压缩sqlplus历史文件的大小
-c: 此参数可以实现目录及文件路径的自动补全功能,在SQL PLUS中输入shell ! vi /etc/sec
命令后,可以通过tab键实现路径补全功能
-i:此参数可以实现在命令行关键字自动补全功能时,忽略大小写。但在文件路径的自动补全中,仍然在大小写区分 的。
-f:此参数后面跟一个关键字补全列表文件,可以在SQL PLUS中实现关键字的查找补全功能。
根据上述参数的含义,我们可以新建一个alias到shell的配置文件中,如下所示
alias sl='rlwrap -D2 -irc -b'\''"@(){}[],+=&^%#;|\'\'' -f ~/work/oracle/tpt/setup/wordfile_11gR2.txt sqlplus sys/oracle@linux01/lin11g as sysdba'
这样就可以实现上面所说的那些功能了。
3. 关键字补全列表文件的构建
大部分人员认为只要在SQL PLUS文件中实现select、update、delete、insert、from等几个少量的关键字的自动补全功能就已经很了不起来,可以满足需求,那还要构建关键字补全列表作什么呢?这里的构建不是简单的几个关键字而已,我还想把数据库表名、数据库关键字列表、数据库包名.函数名、字段名、数据库参数等等都要包含进去,要实现这样的构建可以通过spool filename
+ sql语句来实现,具体的sql脚本为wordfile_11gR2.sql
和wordfile_12cR1.sql
。详细的sql语句如下
set lines 300 trimspool on pages 0 head off feedback off termout off
SELECT DISTINCT name FROM (
select lower(keyword) name from v$reserved_words union all
select upper(table_name) from dict union all
select upper(column_name) from dict_columns union all
-- select object_name from dba_objects union all
select upper(object_name||'.'||procedure_name) from dba_procedures union all
-- select '"'||table_name||'".'||column_name from dba_tab_columns union all
select ksppinm from x$ksppi union all
select name from v$sql_hint
)
WHERE length(name) > 2
ORDER BY 1
4.相关参考文件
相关的文件如下
- tpt/setup/README_rlwrap.txt
- tpt/setup/wordfile_11gR2.sql
- tpt/setup/wordfile_12cR1.sql
- tpt/setup/wordfile_11gR2.txt
- tpt/setup/wordfile_12cR1.txt