刚刚测试了一段程序,报错了,说是数据没有找到:

l_date1 != l_date2
l_date1=26-MAY-11, l_date2=26-MAY-11

……

查来查去原来是nls_date_format惹得祸。

Oracle在使用dbms_output.put_line或fnd_file.put_line等内置程序输出日期型参数时,会自动套用nls_date_format定义的日期格式,恰巧当前数据库中nls_date_format定义的日期格式为DD-MON-RR,没有时分秒,而参与比较的这两个日期却是带时分秒的,并且差异就在时分秒上:

DECLARE l_date1 DATE := to_date('2011/05/26', 'YYYY/MM/DD'); l_date2 DATE := to_date('2011/05/26 16:58:00', 'YYYY/MM/DD HH24:MI:SS'); l_val nls_session_parameters.VALUE%TYPE; BEGIN SELECT VALUE INTO l_val FROM nls_session_parameters WHERE parameter = upper('nls_date_format'); dbms_output.put_line('Original: nls_date_format=' || l_val); dbms_output.put_line('===test if two dates equal with confused info==='); EXECUTE IMMEDIATE 'ALTER SESSION SET nls_date_format = ''DD-MON-RR'''; IF (l_date1 != l_date2) THEN dbms_output.put_line('l_date1 != l_date2'); dbms_output.put_line('l_date1=' || l_date1 || ', l_date2=' || l_date2); END IF; dbms_output.put_line('===test if two dates equal with clear info==='); EXECUTE IMMEDIATE 'ALTER SESSION SET nls_date_format = ''DD-MON-YYYY HH24:MI:SS'''; IF (l_date1 != l_date2) THEN dbms_output.put_line('l_date1 != l_date2'); dbms_output.put_line('l_date1=' || l_date1 || ', l_date2=' || l_date2); END IF; --revert EXECUTE IMMEDIATE 'ALTER SESSION SET nls_date_format = ''DD-MON-RR'''; END;

输出:

Original: nls_date_format=DD-MON-RR ===test if two dates equal with confused info=== l_date1 != l_date2 l_date1=26-MAY-11, l_date2=26-MAY-11 ===test if two dates equal with clear info=== l_date1 != l_date2 l_date1=26-MAY-2011 00:00:00, l_date2=26-MAY-2011 16:58:00

Oracle PL/SQL之令人不解的提示(nls_date_format)相关推荐

  1. oracle pl/sql 程序设计 历史笔记整理

    20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...

  2. ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

    原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE P ...

  3. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)...

    [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) 原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之 ...

  4. [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)

    原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/S ...

  5. Oracle PL/SQL进阶

    Oracle PL/SQL进阶 控制结构 在任何计算机语言(c,java,c#,c++)都有各种控制语句(条件语句,循环语句,顺序控制结构..)在pl/sql中也存在这样的控制结构. 条件分支语句 p ...

  6. Oracle PL/SQL入门

    Oracle PL/SQL入门 为了解决纯SQL语句的缺陷问题,采取了PL/SQL(Procedure Language/Structured Query Language)的方式进行解决. 纯SQL ...

  7. Oracle PL / SQL – UPDATE触发器之前的示例

    本文向您展示了如何使用BEFORE UPDATE TRIGGER ,它在执行更新操作之前就可以使用. 在现实生活中,它主要用于以下目的: 资料验证 自动更新值 数据记录或审核 1.数据验证 假设一些公 ...

  8. Oracle PL/SQL语言初级教程(自学)

    Oracle PL/SQL语言初级教程 PL/SQL 语言基础 PL/SQL 是一种高性能的基于事务处理的语言,能运行在任何 ORACLE 环境中,支持所有数据处理命令. 通过使用 PL/SQL 程序 ...

  9. Oracle PL/SQL编程详解

    Oracle PL/SQL编程详解 - 古立 - 博客园 <我的网络摘抄本> 网摘/转载/备忘/随记 博客园 首页 新随笔 联系 管理 订阅 随笔- 84  文章- 0  评论- 0  & ...

最新文章

  1. 教程 | 基于LSTM实现手写数字识别
  2. 一些惹起热烈争议的PCB布线经验法则
  3. mysql浅拷贝_深入理解浅拷贝和深拷贝
  4. 那些不是秘密的微信earning方法
  5. 再论句子中单词的逆序输出
  6. deepinu盘制作工具_U盘引导盘制作工具Rufus 3.11.1678 正式版
  7. Hadoop介绍及最新稳定版Hadoop 2.4.1下载地址及单节点安装
  8. 详解Parcel:快速,零配置web应用打包工具
  9. JAVA读写Properties属性文件
  10. QEMU模拟mini2440开发环境
  11. 2021-03-16PyCharm3.0默认快捷键(翻译的)PyCharm Default Keymap
  12. edm java_EDM推送
  13. Idea 报错: Variable used in lambda expression should be final or effectively final
  14. MacBook超好用的流程图软件推荐
  15. 有感而发:总结很重要
  16. JAVA oa 系统模块设计方案
  17. ilove中文_iLovePDF中文版
  18. 一起学英语第二季第六期
  19. MySQL删除列,添加列的sql语句
  20. Java + OpenCV 实现素描特效(JavaCV)

热门文章

  1. (转)spring源码解析,spring工作原理
  2. 学习 FPGA之前的基础知识
  3. 学习笔记--Spark
  4. mongodb 复制集 维护小结
  5. 如果你是合格的程序员或者你认为自己是计算机科学家
  6. 保持一颗好学之心(转)
  7. 【爬坑】在 IDEA 中运行 Hadoop 程序 报 winutils.exe 不存在错误解决方案
  8. mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String
  9. 分享一款博客园皮肤及其解决方案
  10. npm install 报错: WARN checkPermissions Missing write access to 解决方案