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