程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 使用JDBC改變Oracle的session參數NLS_DATE_FORMAT

使用JDBC改變Oracle的session參數NLS_DATE_FORMAT

編輯:Oracle教程

使用JDBC改變Oracle的session參數NLS_DATE_FORMAT


最近項目除了一個問題,場景大概是這樣的,項目在國外開發,在項目開發過程中使用了大量的Oracle函數TO_DATE,但是開發人員沒有寫第二個參數。

所以項目在國外的服務器上可以正常運行,可是在國內的服務器上就不能正常運行了。

通過調查是因為,TO_DATE函數的第一個參數為YYYYMMDD,第二個參數為空時,默認使用session中NLS_DATE_FORMAT參數。

數據庫服務器采用的是英文版,所以默認NLS_DATE_FORMAT是RR-MM-DD,而在國外連接到Oracle數據庫服務器時,會使用客戶端的參數

覆蓋服務器端的參數。(這個是根據Oracle官方文檔得出的)

This initial value is overridden by a client-side value if the client uses the Oracle JDBC driver or if the client is OCI-based and the NLS_LANG client setting (environment variable) is defined. The initialization parameter value is, therefore, usually ignored.

但是官方文檔上沒有講怎麼做,所以查資料,在注冊表中的Software》》Oracle下以key開始的key下添加了String Value, NLS_DATE_FORMAT=YYYYMMDD。

通過實驗證實,這個修改對於SQLPLUS是有效的,可是對於SQLDeveloper是無效的。目前還沒有找到對SQLDeveloper有效的方法。

其次,對於JDBC也沒有找到設置參數的方式,如果大家有好的方法可以給我留言。

不過退而求其次,我找到了一個可以解決這個問題的方法,那就是創建觸發器。

我創建的觸發器如下:

CREATE OR REPLACE TRIGGER LOGINTRG
AFTER LOGON ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT=''RR/MM/DD''';
END LOGINTRG;

注意要是日期格式不對,SQL不會執行。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved