domingo, 2 de janeiro de 2011

Habilitando o suporte à acentuação no prompt do DOS para uso do SQL*Plus

Olá,

Muitas vezes nos deparamos com situações em que as ferramentas gráficas como Oracle SQL Developer, PL/SQL Developer, TOAD entre muitas outras, são uma mão na roda. O SQL*Plus (Windows) também é muito útil, mas sou fã mesmo do SQL*Plus (DOS). Por isso estou escrevendo este artigo mostrando como configurar o atalho do Prompt do DOS para oferecer suporte à acentuação para uso do SQL*Plus (linha de comando). Vocês verão que se o mesmo for utilizado sem o suporte à acentuação adequado, isso poderá trazer alguns problemas para quem estiver executando instruções SQL no banco de dados.

Veja a figura abaixo na qual contém um arquivo contendo uma instrução SQL:


Fazendo uso de uma ferramenta gráfica (SQL*Plus versão Windows), foi criada conforme demonstrado na figura abaixo, uma tabela de exemplo e a mesma foi populada com duas palavras que possuem acentuação.


Agora irei iniciar uma outra sessão só que agora fazendo uso do SQL*Plus via DOS.
 
Microsoft Windows XP [versão 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>chcp
Página de códigos ativa: 850

C:\>type script.sql
select * from t1 where nome='aþÒo'

Podemos perceber acima que o código de página padrão do DOS é 850 e que o mesmo não mostrou a palavra 'ação' corretamente. Em vez disso, foi mostrado os caracteres 'aþÒo'. Isto acontece porque o script em questão foi escrito utilizando o encoding Windows 1252 e não o encoding 850. Se conectarmos no banco de dados usando o SQL*Plus, veremos abaixo que os caracteres contendo acentuação também não são mostrados corretamente.
 
C:\>sqlplus scott/tiger

SQL*Plus: Release 10.2.0.1.0 - Production on Dom Jan 2 16:34:57 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Conectado a:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> select * from t1;

NOME
----------
aþÒo
colÚgio

Se executarmos o arquivo script.sql de dentro do SQL*Plus, o registro em questão será retornado.
 
SQL> @script.sql;

NOME
----------
aþÒ

No entanto, se em vez de executarmos o script, digitarmos a instrução SQL manualmente, poderemos ver abaixo que o registro não será retornado, pois estou querendo retornar um registro que possua a palavra 'ação', e não 'aþÒo'.
 
SQL> select * from t1 where nome='ação';

nÒo hß linhas selecionadas  

Perceberam os problemas que poderemos ter executando instruções SQL manualmente? Alguém poderia pensar: Eu tinha certeza que existia um registro com essa palavra. Será que o mesmo foi excluído da tabela? Para evitar esse tipo de situação e habilitar o suporte à acentuação no DOS, bastará apenas realizar 2 modificações no atalho do mesmo conforme demonstrado nas figuras abaixo, ou seja, configurar o uso do código de página 1252 e configurar o uso da fonte Lucida Console:


Após as alterações acima, poderemos abrir novamente o prompt do DOS e executar o SQL*Plus:
 
Página de códigos ativa: 1252

C:\>type script.sql
select * from t1 where nome='ação';

C:\>sqlplus scott/tiger

SQL*Plus: Release 10.2.0.1.0 - Production on Dom Jan 2 16:44:39 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Conectado a:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> select * from t1;

NOME
----------
ação
colégio

SQL> @script.sql

NOME
----------
ação

SQL> select * from t1 where nome='ação';

NOME
----------
ação