博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用JDBC改变Oracle的session參数 NLS_DATE_FORMAT
阅读量:5763 次
发布时间:2019-06-18

本文共 993 字,大约阅读时间需要 3 分钟。

近期项目除了一个问题,场景大概是这种,项目在国外开发。在项目开发过程中使用了大量的Oracle函数TO_DATE,可是开发者没有写第二个參数。

所以项目在国外的server上能够正常执行。但是在国内的server上就不能正常执行了。

通过调查是由于,TO_DATE函数的第一个參数为YYYYMMDD,第二个參数为空时,默认使用session中NLS_DATE_FORMAT參数。

数据库server採用的是英文版,所以默认NLS_DATE_FORMAT是RR-MM-DD,而在国外连接到Oracle数据库server时,会使用client的參数

覆盖server端的參数。

(这个是依据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不会运行。

转载地址:http://kmgkx.baihongyu.com/

你可能感兴趣的文章
ftp服务器的搭建
查看>>
rsync性能测试
查看>>
我的友情链接
查看>>
配置redis主从复制和sentinel模式
查看>>
Linux 用户管理之用户信息与密码的配置文件详解
查看>>
Vsftpd虚拟账号
查看>>
[tomcat7源码学习]初始化之ClassLoader
查看>>
MATLAB中的点运算与常规运算符规则
查看>>
linux更改yum源
查看>>
总结学习过的http头1
查看>>
我的友情链接
查看>>
crontab -r清除后找回
查看>>
Linux学习笔记系统管理5
查看>>
erlang开源项目锦集
查看>>
Git忽略规则.gitignore梳理
查看>>
linux 常用语法
查看>>
酷影集精彩亮相婚博会,颠覆传统影集的APP
查看>>
https单向/双向认证
查看>>
CMB 项目中的问题解决记录
查看>>
[转]获取手机型号、IP(有待验证)
查看>>