जब तक आपके पास टेबल पर एक ट्रिगर नहीं है जो एक तिथि या टाइमस्टैम्प कॉलम सेट कर रहा है, जो पूर्ण त्रुटि स्टैक में कुछ संकेत देगा, यह आपके NLS_DATE_LANGUAGE
जैसा लगता है अंग्रेजी भाषा के महीने के संक्षिप्त नाम की अपेक्षा नहीं कर रहा है।
आपके पास जो है वह अंग्रेजी में मान्य है:
alter session set nls_timestamp_format = 'RR/MM/DD HH24:MI:SSXFF';
alter session set nls_date_language ='ENGLISH';
select to_timestamp('15-APR-14 01.36.58.803000000 PM',
'DD-MON-RR HH.MI.SS.FF AM') as my_date
from dual;
MY_DATE
---------------------------
14/04/15 13:36:58.803000000
लेकिन यदि आपके सत्र की डिफ़ॉल्ट तिथि भाषा पोलिश है (आपकी प्रोफ़ाइल से अनुमान लगाते हुए) तो यह यह त्रुटि देगा - त्रुटि संदेश अभी भी अंग्रेजी में:
alter session set nls_date_language ='POLISH';
select to_timestamp('15-APR-14 01.36.58.803000000 PM',
'DD-MON-RR HH.MI.SS.FF AM') as my_date
from dual;
SQL Error: ORA-01843: not a valid month
01843. 00000 - "not a valid month"
यदि आप अपना सत्र अंग्रेजी पर सेट नहीं करना चाहते हैं तो आप to_timestamp()
को वैकल्पिक तीसरा पैरामीटर देकर किसी विशिष्ट कथन के लिए इसे ओवरराइड कर सकते हैं :
alter session set nls_date_language ='POLISH';
select to_timestamp('15-APR-14 01.36.58.803000000 PM',
'DD-MON-RR HH.MI.SS.FF AM',
'NLS_DATE_LANGUAGE=ENGLISH') as my_date
from dual;
MY_DATE
---------------------------
14/04/15 13:36:58.803000000
आप महीने के नामों के बजाय महीने के नंबरों का उपयोग करके या एएनएसआई टाइमस्टैम्प शाब्दिक सिंटैक्स का उपयोग करके भी पूरी तरह से समस्या से बच सकते हैं:
select timestamp '2014-04-15 13:36:58.803' from dual;
TIMESTAMP'2014-04-1513:36:58.803'
---------------------------------
14/04/15 13:36:58.803000000
ये विधियाँ सभी दिनांक स्तंभों के लिए भी कार्य करती हैं; to_date()
फ़ंक्शन उसी तरह NLS सेटिंग से प्रभावित होता है और उसका वैकल्पिक दिनांक भाषा पैरामीटर समान होता है।