sql डीबी 2, जब प्रदान की गई और संग्रहीत टाइमस्टैम्प के बीच अंतर की गणना करने की कोशिश कर रहा हो तो मुझे एक त्रुटि मिलती है 'फ़ंक्शन का अभिवादन आकस्मिक है'



jdbc db2 (1)

यह मेरा एसक्यूएल स्ट्रिंग है, जिसमें से मैं बयान तैयार करता हूं:

SELECT (DAYS(?) - DAYS(FROM)) * 86400 + (MIDNIGHT_SECONDS(?) -
           MIDNIGHT_SECONDS(FROM)) AS FROM_DIFF,
       (DAYS(?) - DAYS(TO)) * 86400 + (MIDNIGHT_SECONDS(?) - 
           MIDNIGHT_SECONDS(TO)) AS TO_DIFF
FROM CALENDAR.EVENTS WHERE ID = ?

निम्नलिखित कोड से मूल्य भरें:

        ps.setTimestamp(1, new Timestamp(...));
        ps.setTimestamp(2, new Timestamp(...));
        ps.setTimestamp(3, new Timestamp(...));
        ps.setTimestamp(4, new Timestamp(...));
        ps.setInt(5, ...);

और एक अपवाद प्राप्त करें:

com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL त्रुटि: SQLCODE = -245, SQLSTATE = 428F5, SQLERRMC = DAYS; 1, ड्रायवर = 4.16.53

जब मैं इसे सीधे एसक्यूएल ब्राउज़र से चलाऊँ तो वह flawlessly चला जाता है:

SELECT 
    (DAYS('2015-05-05 00:00:00.0') - DAYS(FROM)) * 86400 + (MIDNIGHT_SECONDS('2015-05-05 00:00:00.0') - MIDNIGHT_SECONDS(FROM)) AS FROM_DIFF,
    (DAYS('2015-05-05 00:00:00.0') - DAYS(TO)) * 86400 + (MIDNIGHT_SECONDS('2015-05-05 00:00:00.0') - MIDNIGHT_SECONDS(TO)) AS TO_DIFF  
FROM CALENDAR.EVENTS WHERE ID = 1055;

एक गलती कहाँ है?

धन्यवाद।

पीएस फॉर्मूला इस लेख से समय के अंतर की गणना कैसे की जाती है: डीबी 2 मूल बातें: तारीखों और टाइम्स के साथ मज़ा


विभिन्न डेटा प्रकारों के साथ मापदंडों को स्वीकार करते हुए, DAYS() फ़ंक्शन के कई अतिभारित संस्करण हैं: DATE , TIMESTAMP , और VARCHAR । जब आप untyped पैरामीटर मार्कर ( DAYS(?) ) का उपयोग करते हैं तो क्वेरी कंपाइलर क्वेरी में उपयोग करने के लिए फ़ंक्शन का कौन सा संस्करण निर्धारित करने में असमर्थ है।

आप संकलन के लिए स्पष्ट रूप से पैरामीटर डेटा प्रकार निर्दिष्ट कर सकते हैं: DAYS(CAST(? AS TIMESTAMP)) वैकल्पिक रूप से, यदि आप LUW संस्करण (9.7 और उच्चतर) के लिए हाल ही में डीबी 2 का उपयोग कर रहे हैं तो आप डीबी 2 रजिस्ट्री चर सेट कर सकते हैं:

db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES

कम्पाइलर को यह बताने के लिए कि जब तक पैरामीटर डेटा प्रकार पहले से ही ज्ञात नहीं हो, क्वेरी निष्पादन समय तक तैयार करें कॉल को स्थगित करना चाहिए।





db2-luw