Colega, só um esclarecimento antes de responder : quando vc diz
"...trigger, ... , a mesma foi rodada num client..." , isso NÂO É
preciso, a trigger NUNCA é rodada NUM CLIENTE, e sim SEMPRE NO
SERVIDOR, e SEMPRE é disparada pelo próprio banco em resposta a uma
ação do usuário, nunca é disparada pelo próprio usuário, ok ??

 Agora sim respondendo : pensando em triggers de DML (parece ser o seu
caso aqui), como vc sabe, quando a trigger é disparada, ela roda
EXATAMENTE NA MESMA sessão do cliente que enviou o SQL ao banco -
entre outros fatores, isso TEM que ser assim porque, afinal de contas,
uma sessão DIFERENTE não ia conseguir ver os valores não-comitados , e
a trigger (pensando em FOR EACH ROW) ** precisa desses valores ** para
os acessar via :new/:old, confere ??? Já que é na mesma sessão, ÓBVIO,
a trigger usará exatamente os MESMOS settings NLs (e tudo o mais!!)
que existe na sessão. Exemplo :

[EMAIL PROTECTED]:SQL>select * from NLS_SESSION_PARAMETERS;

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                dd/mm/yyyy hh24:mi:ss
NLS_DATE_LANGUAGE              AMERICAN
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY              $
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE

17 rows selected.

==> ok, no banco tenho AMERICAn como language, vamos ver numa dada
sessão :

[EMAIL PROTECTED]:SQL>select * from NLS_SESSION_PARAMETERS;

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE                   BRAZILIAN PORTUGUESE
NLS_TERRITORY                  BRAZIL
NLS_CURRENCY                   Cr$
NLS_ISO_CURRENCY               BRAZIL
NLS_NUMERIC_CHARACTERS         ,.
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                dd/mm/yyyy hh24:mi:ss
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

17 linhas selecionadas.

==> tenho brazilian... OK, vamos ver o sid/serial desa sessão :

[EMAIL PROTECTED]:SQL>select * from v$session where username='SCOTT';

SADDR     SID SERIAL#   AUDSID PADDR    USER# USERNAME               
    COMMAND            OWNERID TADDR    LOCKWAIT STATUS   SERVER     
         SCHEMA# SCHEMANAME 
-------- ---- ------- -------- -------- ----- ----------------
------------------ ------------------ -------- -------- --------
--------- ------------------ -----------
702441A8    9       9      178 702190B4    64 SCOTT                  
          0         2147483644 70BACE6C          INACTIVE DEDICATED  
              64 SCOTT      


==> agora vamos ter uma trigger que exibe (via output, que PORTANTO já
deverá estar ligado antes) os valores :

[EMAIL PROTECTED]:SQL>l
  1  create or replace trigger TRG_DEPT after insert on DEPT for each row
  2  DECLARE
  3     v_lang varchar2(2000);
  4     v_sid number;
  5     v_serial# number;
  6  BEGIN
  7     select value into v_lang from NLS_SESSION_PARAMETERS where
parameter='NLS_LANGUAGE';
  8     dbms_output.put_line('LANG=' || v_lang);
  9     select sid, serial# into v_sid, v_serial#
 10       from v$session where audsid=userenv('sessionid');
 11     dbms_output.put_line('sid=' || v_sid || ', serial#=' ||
v_serial#);
 12* END;
[EMAIL PROTECTED]:SQL>/

Gatilho criado.

[EMAIL PROTECTED]:SQL>insert into dept values(88, 'Dep.88', null, null);
LANG=BRAZILIAN PORTUGUESE
sid=9, serial#=9

1 linha criada.

==> ok, estava na mesma sessão E com os NLS do cliente... Agora altera
a sessão do cliente :

[EMAIL PROTECTED]:SQL>alter session SET NLS_LANGUAGE='AMERICAN';

Session altered.

==> E tomo uma ação que fará a trigger ser disparada :

[EMAIL PROTECTED]:SQL>insert into dept values(89, 'dep 89', null, null);

==> óia o resultado :

LANG=AMERICAN
sid=9, serial#=9

1 row created.

[EMAIL PROTECTED]:SQL>select * from NLS_SESSION_PARAMETERS;

PARAMETER                      VALUE
------------------------------ ------------------------------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  BRAZIL
NLS_CURRENCY                   Cr$
NLS_ISO_CURRENCY               BRAZIL
NLS_NUMERIC_CHARACTERS         ,.
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                dd/mm/yyyy hh24:mi:ss
NLS_DATE_LANGUAGE              AMERICAN
NLS_SORT                       BINARY
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

17 rows selected.

==> confere ?????? Então NÃO É que a trigger "saiba" de coisa alguma,
ela SIMPLESMENTE está rodando no mesmo workspace lógico, yes ?? E isso
é VERDADEIRO seja o cliente Forms, sqlplus. Vb, Java, o que for...

[]s

 Chiappa

--- Em oracle_br@yahoogrupos.com.br, "ESTUDO" <[EMAIL PROTECTED]> escreveu
>
> Chiappa
> e no caso de uma trigger, que no corpo dela tem translate com
inserts, a mesma foi rodada num client nls_lang = brazilian...
> 
> PERGUNTA:  qdo joaozinho estiver utilizando o programa dele, em
forms, em determinado momento a trigger será disparada, então essa
trigger inserirá nomes de pessoas, com acento, sem acento.. pra isso
ela  utilizará qual nls?
> 
> Se você me disser que ela usará o
nls_lang=BRAZILIANPORTUGUESE_BRAZIL.WE8MSWIN1252 , como a Trigger sabe
disso?
> 
> Obrigada
> 
> Cris
> 
> 
> 
> 
>   ----- Original Message ----- 
>   From: jlchiappa 
>   To: oracle_br@yahoogrupos.com.br 
>   Sent: Friday, February 16, 2007 9:34 AM
>   Subject: [oracle_br] Re: Nls_lang -- dúvida cruel
> 
> 
>   Colega, não só linguagem, MAS para TODOS os principais componentes 
>   NLS_nn (independente do gosto...), o comportamento DOCUMENTADO é que 
>   settings NLS são DITADOS PELO CLIENTE (na prática, o valor do 
>   servidor é um default que será usados SE e APENAS SE o cliente não 
>   especificar nada), como nos diz o manual Oracle Database 
>   Globalization Support Guide, no cap. 1 Overview of Globalization 
>   Support :
> 
>   "
>   From a globalization support perspective, all applications are 
>   considered to be clients, even if they run on the same physical 
>   machine as the Oracle instance. For example, when SQL*Plus is started 
>   by the UNIX user who owns the Oracle software from the Oracle home in 
>   which the RDBMS software is installed, and SQL*Plus connects to the 
>   database through an adapter by specifying the ORACLE_SID parameter, 
>   SQL*Plus is considered a client. Its behavior is ruled by client-side 
>   NLS parameters.
> 
>   Another example of an application being considered a client occurs 
>   when the middle tier is an application server. The different sessions 
>   spawned by the application server are considered to be separate 
>   client sessions.
> 
>   When a client application is started, it initializes the client NLS 
>   environment from environment settings. All NLS operations performed 
>   locally are executed using these settings.
>   "
> 
>   E especificamente no caso do charecter set o mesmo manual nos diz :
> 
>   ""If the client session and the database server specify different 
>   character sets, then the Oracle9i database converts character set 
>   strings automatically.
>   "
>   ==> então SIM, se vc não quiser que haja conversão implícita em 
>   princípio CADA INSTALAÇÂO DE CLIENTE deveria seguir um padrão em 
>   termos de NLS, principalmente de charaterset, sim....
>   Claro, quando vc for fazer a conversão vc até PODERIA usar a sintaxe 
>   de TRANSLATE(argumentos) USING nomedocharactersetaseuusado (cfrme 
>   mostrado no manual "SQL Reference" para esse item), E pra alguns 
>   params NLS, como a linguagem para datas, o formato de datas, etc, vc 
>   indica o que quer já no TO_CHAR/TO_DATE, que o mesmo manual nos 
>   mostra que aceitam NLS_LANG, formato de data, etc, como argumentos, 
>   também.
>   Notar TAMBÉM que muitos params NLS vc pode setar na sessão via 
>   ALTER SESSION (ver o mesmo manual "SQL REFERENCE", assim em tese nada 
>   impede que vc tenha uma trigger de logon aonde FORÇOSAMENTE quando 
>   alguém se loga no banco a trigger dispara e faz um ALTER SESSION SET 
>   NLS__xyz = valorquevcquer.... Mas sinceramente : se for ambiente web 
>   para o cliente é o servidor web, é um lugar só que vc tem que setar, 
>   E se for ambiente client/server ** NECESSARIAMENTE **, acho eu, quem 
>   instala o software de cliente Oracle é um TÉCNICO, não um usuário 
>   final (pois há diversos ajustes a fazer principalmente se será usado 
>   conexão TNS , o procedimento de instalação em si também não é click-
>   click-pronto), então NÂo vejo grande dificuldade em se ter um PADRÂO 
>   para linguagens, charactersets, locais de instalação, componentes a 
>   instalar, ** VERSÂO QUE SERÁ USADA **, etc.
> 
>   []s
> 
>   Chiappa
> 
>   --- Em oracle_br@yahoogrupos.com.br, "ESTUDO" <estudo2003@> 
>   escreveu
>   >
>   > Nls ainda... mas dessa vez é sobre o armazenamendo dos dados !
>   > 
>   > Oracle 9i.
>   > 
>   > Na minha estação de trabalho, tenho o nls_lang=BRAZILIAN 
>   PORTUGUESE_BRAZIL.WE8MSWIN1252
>   > 
>   > E no servidor tenho nls_lang= AMERICAN_AMERICA.WE8ISO8859P1
>   > 
>   > Da minha estação de trabalho rodo um pl-sql que tira acentos com o 
>   comando translate.
>   > Através do select, vejo que o nome José, ao invés de ficar Jose 
>   (sem acento), ficou (Josi).
>   > 
>   > **** Caso eu mude na minha estação de trabalho o 
>   ns_lang=AMERICAN_AMERICA.WE8ISO8859P1 , ocorre tudo certo.
>   > 
>   > Então vem a dúvida: Quando rodo um comando sql, o SGBD grava as 
>   informações conforme o nls_lang da estação de trabalho, ignorando o 
>   nl_lang do servidor?
>   > Como funciona o armazenamento dos dodos???
>   > 
>   > Pensei que internamente o que prevalecia era o nls_lang do servidor.
>   > Se isso for verdade, como testei aqui, não gostei!
>   > Pois se temos vários desenvolvedores, se cada um usar um tipo de 
>   nls_lang, ficará uma hora Josi, outra José, outra Jose .....
>   > 
>   > Obrigada pela atenção
>   > 
>   > Cris
>   > 
>   > 
>   > 
>   > 
>   > 
>   > [As partes desta mensagem que não continham texto foram removidas]
>   >
> 
> 
> 
>    
> 
> [As partes desta mensagem que não continham texto foram removidas]
>


Responder a