2014-04-24 165 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';