用于更改oracle中默认日期格式的Pl/Sql触发器

用于更改oracle中默认日期格式的Pl/Sql触发器,sql,oracle,plsql,oracle11g,Sql,Oracle,Plsql,Oracle11g,我想确保每次登录时,日期格式都从'24-Apr-2014'更改为'24/04/2014' 为此,我创建了一个pl/sql触发器,如下所示 CREATE OR REPLACE TRIGGER CHANGE_DATE_FORMAT AFTER LOGON ON DATABASE BEGIN ALTER SESSION SET NLS_DATE_FORMAT = 'MM/DD/YYYY'; END; / 但是,我没有以sysdba身份登录,因此可能这就

我想确保每次登录时,日期格式都从
'24-Apr-2014'
更改为
'24/04/2014'

为此,我创建了一个pl/sql触发器,如下所示

    CREATE OR REPLACE TRIGGER CHANGE_DATE_FORMAT
    AFTER LOGON ON DATABASE
    BEGIN
    ALTER SESSION SET NLS_DATE_FORMAT = 'MM/DD/YYYY';
    END;
    /
但是,我没有以sysdba身份登录,因此可能这就是我出错的原因


如何确保永久更改日期格式?

您的错误意味着不允许您创建此类触发器。但是你的计划走错了方向。必须在数据库级别设置默认值

设置默认日期时间格式模板 从

默认日期时间格式模板是使用初始化参数
NLS\U DATE\U format
显式指定的,或使用初始化参数
NLS\U TERRITORY
隐式指定的。您可以使用
ALTER session
语句更改会话的默认日期时间格式

那么,对于您的情况,必须在您的应用程序中设置此格式

要检查您在当前会话中是否具有正确的值,请执行以下操作:

select value from v$parameter where upper(name)='NLS_DATE_FORMAT';

嗨,法兹,你能详细说明一下吗。如何登录?e、 g.使用SQL Plus等。。因为,您只需使用connect sys/pwd as sysdba命令
nls\u date\u format
通常是在客户机上设置的。作为客户端配置,您不能/不想这样做有什么原因吗?您是说您没有也不能获得在数据库中创建登录触发器的权限吗?退一步,你想解决什么问题?当人们过分关注<代码> NLSSdDATEOFFECTION/CODE >时,这通常意味着应用程序不正确地依赖于隐式字符串到日期转换。此外,您可以考虑将其设置为<代码>登录> SQL < /代码>用户配置文件,如果它仅针对您,或者
glogin.sql
site profile,如果它适用于所有本地命令行用户。请记住,登录触发器将应用于所有客户端,而不仅仅是SQL*Plus,例如,包括JDBC,这可能会导致混淆。以及所有用户,除非您有选择地将其应用于触发器本身。您还必须使用
executeimmediate
来运行
alter session
命令,它在PL/SQL中不会被识别为简单语句。您肯定会遇到此错误,因为您缺少
CREATE TRIGGER
权限。
select value from v$parameter where upper(name)='NLS_DATE_FORMAT';