Date and time format settings are based on the user's locale and native language. For example, SCOTT needs default NLS_DATE_FORMAT "MM/DD/YYYY", and ZAHN needs default "DD-MON-YYYY".,etc. The idea is to create an AFTER LOGON trigger at database level, which reads LOGON session UserName and sets up NLS_DATE_FORMAT by executing ALTER SESSION dynamically.
CREATE OR REPLACE TRIGGER setup_env
AFTER LOGON
ON DATABASE
declare
c integer;
r integer;
BEGIN
IF SYS_CONTEXT('userenv','session_user') = 'SCOTT' THEN
c := dbms_sql.open_cursor();
dbms_sql.parse(c,'alter session set nls_date_format='||
chr(39)||'MM/DD/YYYY'||chr(39), dbms_sql.NATIVE);
r:=dbms_sql.execute(c);
dbms_sql.close_cursor(c);
ELSIF SYS_CONTEXT('userenv','session_user') = 'ZAHN' THEN
c := dbms_sql.open_cursor();
dbms_sql.parse(c,'alter session set nls_date_format='||
chr(39)||'DD-MON-YYYY'||chr(39), dbms_sql.NATIVE);
r:=dbms_sql.execute(c);
dbms_sql.close_cursor(c);
END IF;
END;
/