Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Diversão com mensagens


Recentemente, vi alguém indicar que eles tinham um técnico da Oracle no local há alguns anos. Essa tecnologia mudou o SQL*Plus para que seu feedback dissesse algo como “cerca de XX linhas selecionadas” em vez de apenas “XX linhas selecionadas”. Ele se perguntou como a tecnologia fez isso. Eu só tinha que cavar para isso e me divertir um pouco com isso. Consegui alterar o texto de feedback e aqui está como fica agora no SQL*Plus para mim:

SQL> set feedback 1
SQL> selecione * from all_users where rownum <3;USERNAME USER_ID CREATED ---------------- --- ---------- --------- SYS 0 30-JAN-09 SYSTEM 5 30-JAN-09 aproximadamente 2 linhas selecionadas. Dar ou receber.

SQL> selecione sysdate de dual;

SYSDATE
———
22-AGO-12

1 linha selecionada. Apenas um.

Então, como consegui que o SQL*Plus alterasse o texto de feedback? Simples.

1. Vá para $ORACLE_HOME/sqlplus/mesg
2. Faça backup dos arquivos sp1us.msg e sp1us.msb (observe, estou nos EUA, então minha instalação é “nós”, você pode ter um código de país de dois caracteres diferente).
3. Abra sp1us.msg em um editor de texto. Fiz o arquivo ter essas entradas:
00005,0, "1 row selected. Just one."
// *Cause:
// *Action:
00006,0, "approximately %ld rows selected. Give or take."
// *Cause:
// *Action:

4. Salve suas alterações e saia do editor.
5. Compile o arquivo msg no arquivo binário msb.
lmsgen sp1us.msg sqlplus sp1 american

Isso é tudo o que há para isso!

Resolvi me divertir um pouco mais com isso. Desta vez, eu queria alterar a mensagem entregue com a mensagem ORA-00942. Então modifiquei $ORACLE_HOME/rdbms/mesg/oraus.msg depois de fazer um backup dele e de seu arquivo binário msb. Então usei o LMSGEN para compilar o arquivo msg:
lmsgen oraus.msg rdbms ora american
Agora, quando consulto uma tabela inexistente, recebo o seguinte:
SQL> select * from no_table;
select * from no_table
*
ERROR at line 1:
ORA-00942: this is not the table you are looking for


Claro, isso é apenas para se divertir. Eu nunca faria isso em um ambiente de produção. E você nunca sabe quando um patch modificará esses arquivos, portanto, manter mensagens personalizadas pode consumir muito tempo a longo prazo. Mas é divertido brincar com isso e confundir alguém da próxima vez que acertar um erro ORA.