दिनांक का कोई प्रारूप नहीं होता - यह डेटाबेस में आंतरिक रूप से 7-बाइट्स के रूप में संग्रहीत किया जाता है। (वर्ष, महीने, दिन, घंटे, मिनट और सेकंड का प्रतिनिधित्व करते हुए) और यह तब तक नहीं है जब तक कि आप जिस भी यूजर इंटरफेस का उपयोग कर रहे हैं (यानी एसक्यूएल/प्लस, एसक्यूएल डेवलपर, जावा, आदि) इसे आपको, उपयोगकर्ता और धर्मान्तरित करने की कोशिश करता है यह कुछ ऐसा है जो आपको सार्थक (आमतौर पर एक स्ट्रिंग) मिलेगा कि तारीख का एक प्रारूप है।
यदि आप किसी प्रक्रिया के लिए स्वरूपित दिनांक प्रदान कर रहे हैं तो यह एक स्ट्रिंग होगी और Oracle NLS_DATE_FORMAT
का उपयोग करके इसे किसी तिथि पर परोक्ष रूप से डालने का प्रयास करेगा। सत्र पैरामीटर:
UPDATE your_table
SET your_date_column = '18-06-14'; -- or equivalently via a bind parameter
परोक्ष रूप से
. में रूपांतरित किया गया हैUPDATE your_table
SET your_date_column = TO_DATE( '18-06-14', 'DD-MM-RR' );
अगर NLS_DATE_FORMAT
मेल नहीं खाता है तो Oracle एक अपवाद उठाएगा (और पैरामीटर प्रत्येक उपयोगकर्ता द्वारा सेट किया जा सकता है, इसलिए आपको इसके संगत होने पर भरोसा नहीं करना चाहिए - विशेष रूप से अंतरराष्ट्रीय संगठनों में जब डिफ़ॉल्ट दिनांक प्रारूप आपके क्षेत्र और भाषा पर निर्भर करता है)।
यदि आप मान अपडेट कर रहे हैं तो DATE
. का उपयोग करें शाब्दिक और स्ट्रिंग नहीं:
UPDATE your_table
SET your_date_column = DATE '2014-06-18';
या स्पष्ट रूप से स्ट्रिंग को रूपांतरित करें और प्रारूप मॉडल प्रदान करें:
UPDATE your_table
SET your_date_column = TO_DATE( '18-06-14', 'DD-MM-RR' );
आपके फ़ंक्शन में पैरामीटर पास करने के लिए भी यही सच है। या तो DATE
का उपयोग करें शाब्दिक:
BEGIN
your_procedure(
p_launch_date => DATE '2014-06-18'
);
END;
/
या स्ट्रिंग को स्पष्ट रूप से एक तिथि में परिवर्तित करें (और निहित रूपांतरण पर भरोसा न करें):
BEGIN
your_procedure(
p_launch_date => TO_DATE( '18-06-14', 'DD-MM-RR' )
);
END;
/