使用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不会执行。

时间: 2024-10-10 16:54:24

使用JDBC改变Oracle的session参数 NLS_DATE_FORMAT的相关文章

Oracle的FIXED_DATE参数

我们知道,在Oracle数据库中正常执行 select sysdate from dual 都可以返回当前主机的系统时间.正常修改系统时间,对应的查询结果也会变成修改后的系统时间.现在遇到一个问题:测试系统修改了主机系统时间,数据库查询 select sysdate from dual 返回的时间和所在系统的主机时间相差很大,进一步排查发现返回的时间是固定不变的.最终发现是Oracle有参数可以使得sysdate一直返回固定的时间,供某些测试场景使用.该库也是因为有其他测试人员设置了该参数,而其

jdbc调用 oracle 存储过程操作

创建有参存储函数findEmpNameAndSal(编号),查询7902号员工的的姓名和月薪,[返回多个值,演示out的用法]当返回2个或多个值,必须使用out符号当返回1个值,就无需out符号 create or replace function findEmpNameAndSal(pempno in number,pename out varchar2) return numberas psal emp.sal%type;begin select ename,sal into pename,

Spring JDBC 框架中, 绑定 SQL 参数的另一种选择:具名参数(named parameter)

使用spring的jdbcTemplate-----使用具名参数 在JDBC用法中,SQL参数是用占位符?表示,并且受到位置的限制,定位参数的问题在于,一旦参数的位置发生变化,必须改变参数的绑定,在Spring JDBC中,绑定SQL参数的另一种选择是使用具名参数,SQL具名参数是按照名称绑定,而不是位置绑定. 什么是具名参数? 具名参数: SQL 按名称(以冒号开头)而不是按位置进行指定. 具名参数更易于维护, 也提升了可读性. 具名参数由框架类在运行时用占位符取代 具名参数只在 NamedP

如何利用JDBC启动Oracle 自动追踪(auto trace)

有时我们需要对执行SQL的具体执行过程做一个追踪分析,特别是在应用程序性能优化的时候.Oracle两个工具可以帮助我们做好性能分析,一个是SQL_TRACE,一个是SESSION_EVENT.SQL_TRACE跟踪SQL执行过程,如解析时间.执行时间.查询时间等:SESSION_EVENT跟踪执行过程的等待事件,如等待客户端响应时间,等待本地磁盘IO事件等等. 开启Oracle自动追踪必须使用DBA权限. 使用JDBC开启SQL_TRACE的方法: conn.prepareStatement("

ORACLE 配置event参数

下面测试来至于11G 1,数据库的版本 www.htz.pw > select * from v$version;   BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production PL/SQL Release 11.2.0.4.0

静默安装oracle 11g及参数配置优化详解

一.安装前准备工作1.修改主机名#vi /etc/hosts   //并添加内网IP地址对应的hostname,如下127.0.0.1           localhost::1                   localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.8.151          linux-test 2.修改standby数据库的/etc/sysconfig/iptables文件,

JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据

一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据 量非常大的业务领域(如图象.档案等). LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对象(Binary Large Object),适用于存贮非文本的字节流数据(如程序.图象.影音等).而CLOB,即字符型大型对象(Character Large Obj

JDBC连接Oracle数据库

我记得大二的时候,我们上java课程,当时老师就说了JDBC这个东西,也没怎么好好学,直到现在,我也不直到JDBC是什么玩意,就知道这玩意可以从数据库提取数据,那么JDBC到底是什么呢? JDBC是Java DataBase Connectivity的缩写,含义意思是java数据库连接,不需要多解释了,我感觉! 那么我们如何去做这样子的一个连接呢?用过一次之后就会发现,其实很简单,记住几个步骤,还有就是导入必要的驱动包就可以了,下面是几个重要的步骤: 第一步,你的项目环境中必须要导入必要的数据库

JDBC操作Oracle,根据日期查询

方法一: 1 SimpleDateFormat dateformat=new SimpleDateFormat("yyyy-MM-dd"); 2 String today=dateformat.format(new Date()); 3 4 String delSql = "delete from ssd_pms_forecast_recode where forecasteNum = '"+forecastNum+"' and forecasteTime