Está vai para quem sempre quis usar TAB no momento de fazer aquele comando no SQL*Plus.
Já imaginou digitar sel no prompt, apertar a tecla TAB e ele automaticamente completar a palavra select? Bom … isso é totalmente possível, graças ao pacote rlwrap. Além de auto completar é possível deixar um histórico de comandos no SQL*Plus. O histórico eu já mostrei a algum tempo atrás como fazer, veja aqui.
Após de você ter instalado o pacote rlwrap(é possível instalar através do yum [Red Hat, Oracle Linhx, Fedora] ou wget [Ubuntu, Debian, Suse]), veja que ele é super simples de usar. Antes de fazer a chamada para o sqlplus, basta colocar o comando rlwrap na frente, dessa forma:
oracle@oracle11g:~$ rlwrap sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Wed Feb 29 22:53:44 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning and Real Application Testing options
SYS@dbtst>
Pronto, a partir de agora você tem o poder de ter o histórico de todas as suas chamadas no SQL*Plus. Faça um teste você mesmo, digite o comando abaixo:
SYS@dbtst> select count(*) from dba_tables;
COUNT(*)
----------
2806
1 row selected.
Agora, aperta a seta para cima ? do seu teclado para ver o seu último comando digitado.
SYS@dbtst> (tecla seta de cima)
SYS@dbtst> select count(*) from dba_tables;
COUNT(*)
----------
2806
1 row selected.
Muito bom né?! Ok … Essa eu já tinha mostrado no último artigo do rlwrap, mais e como auto completar meus comandos? Super simples também, mais primeiro temos que criar nosso catalogo de palavras chaves que rlwrap lerá para saber o que auto completar.
Vamos então criar o arquivo chamado $ORACLE_BASE/sql.dict e nesse arquivo, vamos colocar as seguintes palavras:
select
update
delete
create
number
table
Feito isso, vamos fazer o sqlplus da seguinte forma:
[oracle@oracle11g ~]$ rlwrap -b "" -f $ORACLE_BASE/sql.dict sqlplus
SQL*Plus: Release 11.2.0.3.0 Production on Wed Feb 29 23:01:49 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Enter user-name: system@dbtst
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning and Real Application Testing options
SYSTEM@dbtst>
Ótimo, agora basta digitar sel, aperte a tecla TAB e veja o rlwrap auto completar o comando select
SYSTEM@dbtst> sel [TAB]
SYSTEM@dbtst> select
O segredo aqui está no arquivo $ORACLE_BASE/sql.dict, que funciona como um catalogo de palavras, qual comando você colocar lá o rlwrap vai auto completar.
Lembrando que o rlwrap não funciona somente com o SQL*Plus, ele também faz a mesma coisa com o rman por exemplo:
[oracle@oracle11g ~]$ rlwrap -b "" -f $ORACLE_HOME/sql.dict rman target/
Recovery Manager: Release 11.2.0.2.0 - Production on Wed Feb 29 23:07:08 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: DBTST (DBID=2992708500)
RMAN>
Para não ter que ficar digitando esse comando enorme, gosto de criar um alias dele e colocar no meu arquivo ~/.bashrc:
alias sql='rlwrap -b "" -f $ORACLE_BASE/sql.dict sqlplus'
Feito isso basta agora executar o alias sql que o sqlplus irá abrir com o rlwrap.
[oracle@oracle11g ~]$ . .bashrc
[oracle@oracle11g ~]$ sql
SQL*Plus: Release 11.2.0.3.0 Production on Wed Feb 29 23:10:12 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Enter user-name:
auto complentar, dicas, oracle, rlwrap, sqlplus