Sidebar

Seguramente hemos estado en casos donde el desarrollo de una aplicación no puede ser alterado; por ejemplo, cuando estamos usando una herramienta de terceros (a código cerrado) o algún caso similar.

En estas ocasiones, a veces queremos alterar las sesiones de alguno de los usuarios (posiblemente no de todos), para darle un formato de fecha distinto por ejemplo. En estos casos, tan particulares puedes crear un trigger de sistema (también llamado de BD) para resolver el problema.

A continuación está un pequeño script para que lo puedas llevar a cabo:

CREATE OR REPLACE TRIGGER alter_nls_comp_for_user
AFTER LOGON on DATABASE
BEGIN
    IF ( user = 'MI_USUARIO_DE_LA_APLICACION' ) THEN
        execute immediate
        'ALTER SESSION SET NLS_DATE_FORMAT=DD/MM/RR';
    END IF;
END;
/

IMPORTANTE: Recuerda que el uso de estos triggers debe ser una última opción, ya que cada que un usuario se conecte, Oracle tardará algunos milisegundos en validar si el usuario aplica o no, para alterar su sesión.
Si es que puedes ver o ejecutar algún query en la sesión que quieras alterar, puedes corroborar los valores NLS a nivel sesión con:

(Conectado desde la sesión alterada)

select * from v$nls_parameters;

PARAMETER               VALUE
---------------         ---------------
NLS_DATE_FORMAT         DD/MM/RR

Posibles errores que te trajeron a este artículo:
ORA-01821
ORA-01843
Obtener datos incorrectos o nulos 

 

Saludos

Carlos Contreras
Oracle Certified DBA

 


Tips BD