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.
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þÒo
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:
Muito boa a dica. Até pq no 11g so tem sqlplus dos
Abraços
Alessandro
Olá Alessandro,
Exatamente. No 11g o SQL*Plus GUI foi substituído pelo Oracle SQL Developer.
Abraços e até mais ...
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?
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 ...
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...
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...
Muito Obrigado Eduardo pela ajuda!
Abraços!
Informação muito útil Legatti. Ajudou bastante num problema que tinhamos aqui no trabalho.
Valeu!
Olá Raphael,
Obrigado pela visita!
Abraços e até mais...
Legatti
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!
Postar um comentário