› Fóruns › Banco de dados Oracle › Acentuação Oracle › Responder a: Acentuação Oracle
So pra não ficar no blablablá, eis um exemplo possível : tenho um banco com characterset apropriado, veja aqui :
SQL> select * from nls_database_parameters;
PARAMETER VALUE
—————————— ———————————
NLS_LANGUAGE BRAZILIAN PORTUGUESE
NLS_TERRITORY BRAZIL
NLS_CURRENCY R$
NLS_ISO_CURRENCY BRAZIL
NLS_NUMERIC_CHARACTERS ,.
NLS_CHARACTERSET WE8MSWIN1252
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD/MM/RR
NLS_DATE_LANGUAGE BRAZILIAN PORTUGUESE
NLS_SORT WEST_EUROPEAN
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD/MM/RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD/MM/RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY Cr$
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 11.2.0.4.0
20 linhas selecionadas.
SQL> exit
==> No caso estou com um client rodando em Windows, as variáveis NLS tão corretas no registry, ORACLE_HOME está setado ok apontando pra essa ORACLE_HOME com os valores NLS ok, o teclado está setado como PT-BR padrão ABNT2, o Windows tá em Português MAS olha aqui o encoding errado :
C:\Users\jlchi_000>chcp
Página de código ativa: 850
C:\Users\jlchi_000>
==> Ok, vou criar uma procedure que tem uma string acentuada, PARECE que funciona ok :
SQL> create or replace procedure P1 is
2 x varchar2(100);
3 BEGIN
4 select ‘Ação’ into x from dual;
5 END;
6 /
Procedimento criado.
SQL> select line, text from user_source where name=’P1′ order by line;
LINE TEXT
———- ——————————————————————————–
1 procedure P1 is
2 x varchar2(100);
3 BEGIN
4 select ‘Ação’ into x from dual;
5 END;
SQL> exit
===> MAS está Gravado incorretamente!! Ao consultar o código dessa P1 pelo ORACLE SQL DEVELOPER (que por ser feito em Java usa SEMPRE UNICODE) aí nós vemos isso :
create or replace procedure P1 is
x varchar2(100);
BEGIN
select ‘A‡Æo’ into x from dual;
END;
Hummmm… Vamos CORRIGIR O ENCODING NO PROMPT DE COMANDO :
C:\Users\jlchi_000>chcp 1250
Página de código ativa: 1250
C:\Users\jlchi_000>sqlplus system/oracle
SQL*Plus: Release 11.2.0.4.0 Production
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Conectado a:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 – 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining
and Real Application Testing options
SQL> create or replace procedure P1 is
2 x varchar2(100);
3 BEGIN
4 select ‘Ação’ into x from dual;
5 END;
6 /
Procedimento criado.
SQL> exit
Desconectado de Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 – 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining
and Real Application Testing options
C:\Users\jlchi_000>
==> Agora olha o que eu obtenho fazendo um refresh no SQL DEVELOPER :
create or replace procedure P1 is
x varchar2(100);
BEGIN
select ‘Ação’ into x from dual;
END;
OKDOC ??? C.Q.D. Como Queríamos Demonstrar….
No seu caso, como vc diz que foi depois de editar via sqlplus no Linux que o ‘problema’ ocorreu, sabendo que sqlplus SIGNIFICA PROMPT DE COMANDO, pra mim é muito MUITO provável que seu ‘problema’ seja encoding incorreto no prompt Linux, que pra Linux é o comando LOCALE…. E Aponto de Novo, é COMUM no Linux vc usar um software de TERMINAL que precisa ser Ajustado corretamente também, veja lá…..
[]s
Chiappa
OBS : para alguns testes mais detalhados, vide meu blog em https://jlc1967.wordpress.com/2015/02/25/nls-acentuacao-e-outros-misterios-de-localizacao-no-rdbms-oracle/ …..