Colegas, 

 Acho que descobri o que deve ser o motivo do problema: NLS_LANGUAGE diferentes 
nas sessions
 

 Vejam abaixo:
 SQL> SELECT * FROM V$NLS_PARAMETERS;
 

 PARAMETER                                                        VALUE
 ---------------------------------------------------------------- 
----------------------------------------------------------------
 NLS_LANGUAGE                                                     BRAZILIAN 
PORTUGUESE
 NLS_TERRITORY                                                    BRAZIL
 NLS_CURRENCY                                                     R$
 NLS_ISO_CURRENCY                                                 BRAZIL
 NLS_NUMERIC_CHARACTERS                                           .,
 NLS_CALENDAR                                                     GREGORIAN
 NLS_DATE_FORMAT                                                  DD-MON-RR
 NLS_DATE_LANGUAGE                                                BRAZILIAN 
PORTUGUESE
 NLS_CHARACTERSET                                                 WE8ISO8859P1
 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_NCHAR_CHARACTERSET                                           AL16UTF16
 NLS_COMP                                                         BINARY
 NLS_LENGTH_SEMANTICS                                             BYTE
 NLS_NCHAR_CONV_EXCP                                              FALSE
 

 19 linhas selecionadas.
 

 SQL> ALTER SESSION SET NLS_LANGUAGE = 'BRAZILIAN PORTUGUESE';
 

 Sessão alterada.
 

 SQL> Declare
   2      nResult    Number;
   3  Begin
   4      Begin
   5          Select 1
   6          Into nResult
   7          From dual
   8          Where  REGEXP_LIKE ( 
'lilian.leite@autoação2000.com.br','^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$');
   9      Exception
  10          When Others Then
  11              nResult := 0;
  12      End;
  13      Dbms_Output.Put_Line('nResult='||nResult);
  14  End;
  15  /
 nResult=1
 

 Procedimento PL/SQL concluído com sucesso.
 

 SQL> ALTER SESSION SET NLS_LANGUAGE = 'AMERICAN';
 

 Session altered.
 

 SQL> Declare
   2      nResult    Number;
   3  Begin
   4      Begin
   5          Select 1
   6          Into nResult
   7          From dual
   8          Where  REGEXP_LIKE ( 
'lilian.leite@autoação2000.com.br','^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$');
   9      Exception
  10          When Others Then
  11              nResult := 0;
  12      End;
  13      Dbms_Output.Put_Line('nResult='||nResult);
  14  End;
  15  /
 nResult=0
 

 PL/SQL procedure successfully completed.
 

 

 

 Conclusão: 
 Com o NLS_LANGUAGE = 'AMERICAN', os caracteres acentuados não são considerados 
no meu REGEXP_LIKE, que é o resultado que desejo.
 Já com o NLS_LANGUAGE = 'BRAZILIAN PORTUGUESE', os caracteres acentuados são 
considerados no REGEXP_LIKE  e trazem um resultado indesejado.
 

 Pergunta:
 O bloco acima foi utilizado somente para demonstrar o problema.
 Na verdade, esse código está numa função compilada no banco.
 Existe alguma forma de fazer com que esse parâmetro seja desprezado, sendo 
considerado sempre a nível de banco e não de session ?
 

 Uma possibilidade seria incluir o "execute_immediate" abaixo na function. Já 
teste e funciona, mas gostaria de evitar fazer dessa forma se fosse possível:
 EXECUTE IMMEDIATE('ALTER SESSION SET NLS_LANGUAGE = "AMERICAN"');

 É possível inclusive preservar o NLS_LANGUAGE original buscando-o na 
V$NLS_PARAMETERS e no final da function voltar a deixar como estava executando 
outro "EXECUTE IMMEDIATE"
 

 Aguardo sugestões e comentários dos colegas.
 

 Abs,
 

 Zilmar Furquim
 Synchro Systems
 

 


  

 

  • [oracle... zfurq...@gmail.com [oracle_br]
    • Re... Emerson dos Santos Gaudêncio emerson.fen...@gmail.com [oracle_br]
      • ... zfurq...@gmail.com [oracle_br]
        • ... Emerson dos Santos Gaudêncio emerson.fen...@gmail.com [oracle_br]
          • ... zfurq...@gmail.com [oracle_br]
            • ... jlchia...@yahoo.com.br [oracle_br]
              • ... zfurq...@gmail.com [oracle_br]
                • ... jlchia...@yahoo.com.br [oracle_br]
                • ... Gustavo Guedes guedescomputa...@gmail.com [oracle_br]
                • ... jlchia...@yahoo.com.br [oracle_br]
      • ... zfurq...@gmail.com [oracle_br]
        • ... Emerson dos Santos Gaudêncio emerson.fen...@gmail.com [oracle_br]
          • ... zfurq...@gmail.com [oracle_br]
        • ... 'Schiavini' et...@schiavini.inf.br [oracle_br]

Responder a