Um recurso muito útil, que digamos, demorou para ser inserido nas funcionalidades do SQL*Plus e ainda é pouco conhecido pela maioria é o comando HIST[ORY].
Em função desta "deficiência" da ferramenta ao longo dos anos, grande parte da comunidade passou a utilizar o rlwrap que proporciona um acesso rápido ao histórico de comandos do SQL*Plus e RMAN, por exemplo.
Apesar do RMAN ainda não possuir um comando history nativo, a funcionalidade introduzida a partir da versão 12.2 no SQL*Plus é bem interessante pois permite que o usuário consulte, edite, execute e remova comandos armazenados no histórico de sua sessão.
O comando show hist permite que seja consultado se a geração de histórico está habilitada ou não, bem como o tamanho (quantidade de comandos) armazenados no histórico caso este esteja habilitado.
Para habilitar a funcionalidade basta digitar
set hist on
SQL> show hist
history is OFF
SQL> set hist on
SQL> show hist
history is ON and set to "100"
Para ajustar a quantidade de comandos mantidos no histórico utilize o comando set hist <quantidade>
SQL> set hist 1000
SQL> show hist
history is ON and set to "1000"
Para exibir os comandos já executados a partir do histórico execute
hist
SQL> hist
SP2-1651: History list is empty.
SQL> select 1 from dual;
1
----------
1
SQL> hist
1 select 1 from dual;
SQL> show user
USER is "SYS"
SQL> hist
1 select 1 from dual;
2 show user
Para editar um comando do histórico utilize a opção
hist <linha> edit
SQL> hist 1 edit
select 1234 from dual;
A edição do histórico irá manter o comando original e ira adicionar ao histórico uma nova entrada contendo a alteração realizada
SQL> hist
1 select 1 from dual;
2 show user
3 select 1234 from dual;
O comando edit irá utilizar o utilitário padrão do sistema operacional para realizar a edição do comando caso a variável _EDITOR não tenha sido definida na sessão. No caso de um ambiente Linux o vi será o padrão mas podemos alter-la para qualquer outro utilitário de edição através do comando define _EDITOR.
Caso uma entrada inválida seja inserida receberemos erro ao executar o hist edit
SQL> define _EDITOR = nao_exite
SQL> hist 1 edit
/bin/bash: nao_exite: command not found
SQL> define _EDITOR = vi
Para re-executar um comando contido no histórico utilize o comando
hist <linha> run
SQL> hist
1 select 1 from dual;
2 show user
3 select 1234 from dual;
SQL> hist 3 run
1234
----------
1234
Para deletar um comando do histórico utilize
hist <linha> del
SQL> hist
1 select 1 from dual;
2 show user
* 3 select 1234 from dual;
SQL> hist 3 del
SQL> hist
1 select 1 from dual;
2 show user
Para apagar todo o histórico utilize o comando
hist clear
SQL> hist
1 select 1 from dual;
2 show user
SQL> hist clear
SQL> hist
SP2-1651: History list is empty.
Referência:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqpug/HISTORY.html#GUID-CCF9B047-3122-4644-BA06-5FA4B5812E9F
Mais informações →