आपकी प्रक्रिया timestamp
. प्रकार के पैरामीटर लेती है . आप वास्तव में varchar2
. प्रकार के पैरामीटर पास कर रहे हैं आपके कॉल में। यह Oracle को varchar2
. का अंतर्निहित रूपांतरण करने के लिए बाध्य करता है timestamp
. के पैरामीटर अपने सत्र के NLS_TIMESTAMP_FORMAT
. का उपयोग करके . यह अलग-अलग सत्रों के लिए अलग-अलग होगा, इसलिए संभव है कि कम से कम कुछ सत्रों में त्रुटि हो क्योंकि स्ट्रिंग उस सत्र के NLS_TIMESTAMP_FORMAT
के प्रारूप से मेल नहीं खाती है। . to_timestamp
को स्पष्ट रूप से कॉल करके आपको वास्तविक टाइमस्टैम्प में पास करने के लिए बेहतर सेवा दी जाएगी या टाइमस्टैम्प शाब्दिक पास करके।
तब आपकी प्रक्रिया timestamp
. लेती है पैरामीटर और उन्हें to_date
. पर पास करें समारोह। to_date
फ़ंक्शन timestamp
. प्रकार के पैरामीटर नहीं लेता है , यह केवल varchar2
. प्रकार के पैरामीटर लेता है . यह Oracle को timestamp
. का एक और अंतर्निहित रूपांतरण करने के लिए बाध्य करता है varchar2
. के पैरामीटर , फिर से सत्र के NLS_TIMESTAMP_FORMAT
. का उपयोग करके . यदि सत्र का NLS_TIMESTAMP_FORMAT
. है आपके to_date
में स्पष्ट प्रारूप मास्क से मेल नहीं खाता कॉल करें, तो आपको एक त्रुटि मिलेगी या रूपांतरण एक ऐसा परिणाम देगा जिसकी आपको अपेक्षा नहीं है।
यदि आपकी तालिका का कॉलम वास्तव में date
. प्रकार का है , आप सीधे date
. की तुलना कर सकते हैं एक timestamp
. के लिए . इसलिए to_date
. पर कॉल करने का कोई कारण नहीं दिखता है यहां। हालांकि, आपके नमूना डेटा के आधार पर, ऐसा प्रतीत होता है कि आपकी तालिका का स्तंभ वास्तव में timestamp
प्रकार का है date
. के बजाय जैसा कि आपके कोड का तात्पर्य है, date
. के बाद से परिशुद्धता के भिन्नात्मक सेकंड नहीं हैं। अगर ऐसा है, तो to_date
. पर कॉल करने का कोई मतलब नहीं है अपने SELECT
. में कथन क्योंकि आपके पैरामीटर वास्तव में timestamp
. प्रकार के हैं और आपका कॉलम timestamp
. प्रकार का है . बस timestamp
की तुलना करें मान।
इसलिए, मेरा अनुमान है कि आप कुछ ऐसा चाहते हैं
CREATE OR REPLACE PROCEDURE PROC1(
V_STARTTIME IN TIMESTAMP ,
V_ENDTIME IN TIMESTAMP )
BEGIN
INSERT INTO TAB1( <<column name>> )
SELECT COINS
FROM TAB2
WHERE <<timestamp column name>> BETWEEN v_starttime AND v_endtime;
END;
और आप वास्तविक टाइमस्टैम्प पास करके प्रक्रिया को शांत करना चाहते हैं। टाइमस्टैम्प अक्षर का उपयोग करना
Execute proc1(timestamp '2014-05-05 11:25:00', timestamp '2014-05-05 12:25:00' )
या स्पष्ट रूप से to_timestamp
. पर कॉल करके
execute proc1( to_timestamp( '5/05/2014 11:25:00 AM', 'MM/DD/YYYY HH:MI:SS AM' ),
to_timestamp( '5/05/2014 12:25:00 PM', 'MM/DD/YYYY HH:MI:SS AM' ) );
इससे उन सभी निहित प्रकार के रूपांतरणों से छुटकारा मिल जाएगा जो वर्तमान में हो रहे हैं।