Oracle PL/SQL之令人不解的提示(nls_date_format)

來源:互聯網
上載者:User

剛剛測試了一段程式,報錯了,說是資料沒有找到:

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

 

輸出:

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.