使用JDBC改變Oracle的session參數 NLS_DATE_FORMAT,oraclenlslang

來源:互聯網
上載者:User

使用JDBC改變Oracle的session參數 NLS_DATE_FORMAT,oraclenlslang

最近項目除了一個問題,情境大概是這樣的,項目在國外開發,在項目開發過程中使用了大量的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不會執行。



oracle中alter session set nls_date_format的問題?

session 是 會話, 也就是 本次串連到資料庫的時候, 相關的基本資料。

alter session set nls_date_format = ‘yyyy-dd--mm’

就是修改本會話的 日期顯示格式。

這個修改, 僅僅修改本次登入的 情況。
不修改別的會話的。

如果你登出了, 這些資訊就丟失了。
當你重新登入以後, 又是一個新的 Session 了。

下面是一個測試的例子:

D:\>sqlplus test/test@testdb
SQL*Plus: Release 9.2.0.1.0 - Production on 星期一 4月 1 09:46:43 2013
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
串連到:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

-- 首次查詢日期
SQL> select sysdate from dual;
SYSDATE
----------
01-4月 -13

-- 修改會話的 日期顯示格式
SQL> alter session set nls_date_format = 'yyyy-dd-mm'
2 ;
會話已更改。

-- 查詢日期

SQL> select sysdate from dual;
SYSDATE
----------
2013-01-04

-- 重新串連一次.
SQL> conn test/test@testdb
已串連。

-- 重新查詢日期, Session 設定被重設。
SQL> select sysdate from dual;
SYSDATE
----------
01-4月 -13
SQL>
 
oracle nls_date_format問題

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.