यह वास्तव में Oracle 10.5.0.2 और 11.2.0.1 में एक बग है।
बग को निम्न के रूप में पुन:प्रस्तुत किया जा सकता है:
सत्र में NLS_TIMESTAMP_FORMAT सेट करें।
यूनिकोड डेटा के साथ कोई भी निहित या स्पष्ट TO_DATE रूपांतरण चलाएं।
यूनिकोड डेटा के साथ अगला निहित या स्पष्ट TO_TIMESTAMP टाइमस्टैम्प प्रारूप के आंतरिक रीसेट को ट्रिगर करेगा।
सभी लगातार TO_TIMESTAMP विफल हो जाएंगे और टाइमस्टैम्प का TO_CHAR अमान्य आउटपुट देगा।
यहाँ व्यवहार का परीक्षण करने के लिए कोड है:
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS' NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
REM --- WORKS:
SELECT TO_TIMESTAMP('2013-06-24 18:15:10.312') FROM DUAL;
REM --- WORKS:
SELECT TO_DATE('2013-06-24 18:15:10') FROM DUAL;
REM --- WORKS:
SELECT TO_TIMESTAMP('2013-06-24 18:15:10.312') FROM DUAL;
REM --- WORKS:
SELECT TO_TIMESTAMP(x) FROM (SELECT CAST('2013-06-24 18:15:10.312' AS NVARCHAR2(30)) AS X FROM DUAL);
REM --- WORKS:
SELECT TO_DATE(x) FROM (SELECT CAST('2013-06-24 18:15:10' AS NVARCHAR2(30)) AS X FROM DUAL);
REM --- WORKS:
SELECT TO_TIMESTAMP('2013-06-24 18:15:10.312') FROM DUAL;
REM !!! FAILS!
SELECT TO_TIMESTAMP(x) FROM (SELECT CAST('2013-06-24 18:15:10.312' AS NVARCHAR2(30)) AS X FROM DUAL);
REM !!! FAILS!
SELECT TO_TIMESTAMP('2013-06-24 18:15:10.312') FROM DUAL;
REM --- WORKS:
SELECT TO_DATE('2013-06-24 18:15:10') FROM DUAL;