zoukankan      html  css  js  c++  java
  • 使用JDBC改变Oracle的session參数 NLS_DATE_FORMAT

    近期项目除了一个问题,场景大概是这种,项目在国外开发。在项目开发过程中使用了大量的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不会运行。


  • 相关阅读:
    2. linux下如何上传和下载文件
    (六)使用Docker镜像(下)
    (五)使用Docker镜像(上)
    1. chmod命令
    阿里P7/P8学习路线图——技术封神之路
    问题二:pip install python-igraph 报错,C core of igraph 没有安装。
    问题一:【Hive】explain command throw ClassCastException in 2.3.4
    (四)docker创建私人仓库
    P5024 保卫王国
    jzoj5980. 【WC2019模拟12.27】字符串游戏
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7390095.html
Copyright © 2011-2022 走看看