2014-04-24 119 views
1

更改默认的日期格式我想确保我每次登录的日期格式时间从'24-Apr-2014'变更为'24/04/2014'PL/SQL触发器在Oracle

对于我创建了一个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所以也许这就是为什么我得到的错误

SQL> @C:/pl/dateTrigger.sql 
    AFTER LOGON ON DATABASE 
      * 
    ERROR at line 2: 
    ORA-01031: insufficient privileges 

我该怎么做才能确保日期格式永久更改?

+1

嗨法齐尔,你能否详细说明这一点。 如何登录?例如使用SQL Plus等。 因为,只需使用 connect sys/pwd as sysdba命令 –

+8

'nls_date_format'通常是在客户端上设置的东西。是否有理由不能/不想将其作为客户端配置?你是说你没有,也不能获得在数据库中创建登录触发器的权限?而且,退后一步,你想解决什么问题?当人们过分关注'nls_date_format'时,通常意味着应用程序不正确地依赖于隐式字符串到日期的转换。 –

+2

另外,你可以考虑在'login.sql'用户配置文件中设置它,如果它只适合你,或者'glogin.sql'站点配置文件(如果它适用于所有本地命令行用户)。请记住,登录触发器将应用于所有客户端,而不仅仅是SQL * Plus - 例如包括JDBC,这可能会导致混淆。除非您有选择地将其应用于触发器本身,所有用户。您还必须使用'execute immediate'来运行'alter session'命令,它不会在PL/SQL中被识别为一个简单的语句。 –

回答

1

您的错误意味着您不允许创建这样的触发器。但你的错误轨道上。您必须在数据库级别设置默认值。

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

Oracle documentation

的默认日期时间格式模板被指定了明确与初始化参数NLS_DATE_FORMAT隐含与初始化参数NLS_TERRITORY。您可以使用ALTER SESSION声明更改会话的默认日期时间格式。

然后对于您的情况,这种格式必须在您的database initialization parameters中设置。

要检查你在当前会话中的权值:

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