刚刚测试了一段程序,报错了,说是数据没有找到: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之嵌套表(Nested Table)Oracle PL/SQL之GROUP BY ROLLUP相关资讯 Oracle教程
- Oracle中纯数字的varchar2类型和 (07/29/2015 07:20:43)
- Oracle教程:Oracle中查看DBLink密 (07/29/2015 07:16:55)
- [Oracle] SQL*Loader 详细使用教程 (08/11/2013 21:30:36)
| - Oracle教程:Oracle中kill死锁进程 (07/29/2015 07:18:28)
- Oracle教程:ORA-25153 临时表空间 (07/29/2015 07:13:37)
- Oracle教程之管理安全和资源 (04/08/2013 11:39:32)
|
本文评论 查看全部评论 (0)