Para melhor visualização, recomendo resolução de no mínimo 1280 x 800 e navegador Mozilla Firefox


domingo, 2 de janeiro de 2011

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

Por Eduardo Legatti

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




10 comentários:

Alesssandro Guimaraes disse...

Muito boa a dica. Até pq no 11g so tem sqlplus dos
Abraços
Alessandro

Eduardo Legatti disse...

Olá Alessandro,

Exatamente. No 11g o SQL*Plus GUI foi substituído pelo Oracle SQL Developer.

Abraços e até mais ...

Unknown disse...

Meu problema é um pouco diferente: executei alguns scripts com acentuação e os mesmos ficaram ARMAZENADOS no banco com aquela forma "quebrada". Alterei as propriedades do atalho do cmd.exe, porém ele altera apenas a exibição. O que eu estou procurando é uma maneira de conseguir inserir e garantir que os dados sejam corretamente aramazenados. Alguma idéia do que posso fazer?

Eduardo Legatti disse...

Olá Joe,

O que você quer dizer com forma "quebrada"? A inserção dos dados foi realizada antes ou após a alteração na propriedade do atalho ?

Abraços e até mais ...

Unknown disse...

Vou explicar: uso o ambiente windows para aplicar cargas de scripts em bancos Oracle instalados em servers Linux. Pra isso executo um bat(que não usa o atalho criado) que chama um arquivo sql, que por sua vez importa os scripts em questão. Acontece que esses scripts estão corretos quanto à acentuação, porém, quando são executados usando o sqlplus, aparentemente armazenam as strings com acentuação quebrada. Nesses ambientes windows instalamos clients Oracle conforme o S.O.: uns versão 10.2.0 outros versão 11.2.0... Uma alternativa que estamos pensando pra corrigir o problema é alterar o enconding desses scripts de UTF-8 pra ISO...
Talvez o teu post me ajude se eu quem sabe fizesse com que o bat chamasse o atalho do DOS e não o executável diretamente...

Eduardo Legatti disse...

Olá Joe,

O ideal seria utilizar o encoding ISO mesmo. No mais, o artigo em questão faz referência apenas à problemas na "visualização" dos caracteres. Se você está garantindo que o texto está corretamente acentuado e usando o encoding "Windows 1252: Western European" ou algum ISO equivalente (ISO-8859-1), então você não terá problemas durante a inserção dos dados. Veja o exemplo abaixo aonde eu criei um arquivo que está corretamente acentuado, mas o atalho do DOS não está configurado corretamente para visualizá-lo.

C:\>type script.sql
insert into teste values ('aþÒo');
commit;

C:\>type executa.bat
sqlplus teste/teste @script.sql

C:\>executa.bat

C:\>sqlplus teste/teste @script.sql

SQL> insert into teste values ('aþÒo');

1 linha criada.

SQL> commit;

Commit concluÝdo.

SQL> select * from teste;

ID
----------
aþÒo

Após a execução do arquivo .bat, abaixo você verá que realizando o SELECT no (prompt do DOS alterado) conforme a orientação do artigo, iremos conseguir visualizar a palavra "ação" acentuada sem problemas.

C:\>sqlplus teste/teste

SQL> select * from teste;

ID
----------
ação

Portanto, não adiantaria executar o .bat pelo atalho diretamente, pois o problema não é esse. Faça o teste alterando o encoding do arquivo para algum ISO compatível. Vale a pena salientar que o "character set" do banco de dados, se configurado de forma errada, também pode causar problemas na visualização dos caracteres, etc...

Abraços e até mais...

Unknown disse...

Muito Obrigado Eduardo pela ajuda!

Abraços!

Raphael Fernandes disse...

Informação muito útil Legatti. Ajudou bastante num problema que tinhamos aqui no trabalho.

Valeu!

Eduardo Legatti disse...

Olá Raphael,

Obrigado pela visita!

Abraços e até mais...

Legatti

Anônimo disse...

Poxa cara, muito obrigado pela dica. Procurava por isso a muito tempo, agora consigo usar acentuação nos programas feitos na linguagem c. Muito obg msm!

Postagens populares