Usar histórico de comandos no SQL*Plus

Quem trabalha com o SQL*Plus sabe que uma das coisas mais irritantes nessa ferramenta é que depois de executar alguns comandos, ao tentar usar a seta para cima no teclado para voltar alguns comandos atrás, nada funciona.

Sim, apesas dos bilhões de dólares que a Oracle ganha anualmente, até hoje, ela não foi capaz de implementar um histórico navegável de comandos no SQL*Plus.

Mas existe um utilitário capaz de resolver isso, o rlwrap! O rlwrap utiliza a biblioteca readline do linux para “encapsular” o input de teclado de qualquer outro comando, fornecendo um histório navegável e editável dos comandos que você escreveu, por exemplo, no SQL*Plus ou no RMAN.

Para instalar a última versão disponível, baixe os fontes do rlwrap (link acima) e salve em um diretório temporário qualquer. Tenha certeza de que sua distribuição linux tem instalada a readline e a readline-devel.

Descompacte os fontes e, dentro do diretório descompactado, rode o configure, o make e o make install (os exemplos abaixos fazem a instalação do rlwrap no diretório /opt/rlwrap-0.42, com o link simbólico /opt/rlwrap):

wget http://utopia.knoware.nl/~hlub/uck/rlwrap/rlwrap-0.42.tar.gz
tar -zxvf rlwrap-0.42.tar.gz
cd rlwrap-0.42
./configure --prefix=/opt/rlwrap-0.42
make
make check
make install
ln -s /opt/rlwrap-0.42 /opt/rlwrap

Agora você deve ajustar a variável PATH de seu ambiente para incluir o diretório /opt/rlwrap/bin no caminho de busca. Pronto! Agora é só testar, por exemplo (-i é case-insentive; -c é para completar nomes de arquivos e -s para determinar o tamanho do histório de comandos):

rlwrap -c -i -s 1000 sqlplus /nolog

Você verá que poderá usar o histórico de comandos no SQL*Plus! E o histório fica armazenado para sessões futuras, ou seja: se você sair do SQL*Plus e voltar depois, poderá navegar pelo histórico das sessões anteriores! Da mesma forma que no Bash, você poderá usar o Ctrl-R para procurar por comandos anteriores e poderá usar o tab para completar nomes de arquivos!

Para facilitar, você pode criar um alias para chamar o SQL*Plus através do rlwrap, por exemplo:

alias rlsql='rlwrap -c -i -s 1000 sqlplus /nolog'

ATENÇÃO: não utilize o rlwrap para rodar scripts!

Essa ferramenta foi criada para ser utilizada de forma interativa, ou seja, com o usuário no teclado! Se você utilizar o rlwrap com scripts sql, terá resultados imprevisíveis!

E lembre-se: rlwrap não é uma ferramenta da Oracle e, portanto, não tem suporte nem nada. Em compensação, você pode utilizá-la para qualquer utilitário de linha de comando que não tenha um histório de comandos!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *