欢迎投稿

今日深度:

使用JDBC改变Oracle的session参数 NLS_DATE_FORMAT,orac

使用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问题


www.htsjk.Com true http://www.htsjk.com/shujukunews/4283.html NewsArticle 使用JDBC改变Oracle的session参数 NLS_DATE_FORMAT,oraclenlslang 最近项目除了一个问题,场景大概是这样的,项目在国外开发,在项目开发过程中使用了大量的Oracle函数TO_DATE,但是开发人员没有...
相关文章
    暂无相关文章
评论暂时关闭