2012-02-29 13 views
5

मुझे यहां .NET 4.0 C#, IBatisNet और CSLA ढांचे के साथ एंटरप्राइज़ प्रोजेक्ट मिला है।"ORA-01084 का पीछा करना: ओसीआई कॉल में अमान्य तर्क"

पैकेज में सम्मिलित प्रो को कॉल करते समय परियोजना नौकरियों में से एक ORA-01084: invalid argument in OCI call के साथ विफल रहा है। लौटाई गई त्रुटि संदेश सबसे अच्छा है, संग्रहित प्रो में 83 इनपुट पैरामीटर हैं जो नाम से बंधे नहीं हैं (आईबीटिस के लिए धन्यवाद)।

उत्सुकता क्या है: मुझे रिकॉर्ड का एक सेट मिला है Order और OrderItems कहें। Order में 28 ऑर्डर आइटम हैं। नौकरी को Order बनाकर ऑर्डर को नवीनीकृत करना है और सभी OrderItems रिकॉर्ड कॉपी करना है। नए ऑर्डर आइटम पुरानी ऑर्डर आइटम्स को ParentOrderItemId फ़ील्ड द्वारा संदर्भित कर रहे हैं, जो नवीनीकृत होने के कारण Orders के लिए चयन मानदंड भी है।

जब मैं इसे पहली बार चलाता हूं तो प्रक्रिया OrderItemId: 12345 पर ORA-01084 त्रुटि के साथ उड़ाती है। लेकिन जब मैं अगली बार इसे फिर से चालू करता हूं, तो यह सफलतापूर्वक OrderItemId: 12345 को संसाधित करता है। और फिर OrderItemId: 12444 पर उड़ाता है। मैं फिर से पुन: प्रयास करता हूं और यह OrderItemId: 12444 सही ढंग से और इतने पर और आगे संसाधित करता है।

मुझे पास के डीबी पैरामीटर के लॉग मिल गए हैं, वे दोनों मामलों में समान हैं।

मुझे ओसीआई क्लाइंट ट्रेस मिला है, लेकिन यह उपयोगी नहीं है।

मैंने डेटाबेस परत पर लॉगिंग सेट अप किया है, और अब तक यह मुझे कुछ भी नहीं दे रहा है।

कोई भी विचार उन प्रकार की त्रुटियों का पता लगाने के लिए कैसे?

+1

अस्पष्ट विचार: यदि ओसीआई कॉल में पारित पैरामीटर पहले असफल और दूसरे सफल निष्पादन पर समान हैं (जैसा कि आपने कहा था कि डीबी पैरामीटर के लॉग में देखा जा सकता है), कुछ प्रकार की प्रारंभिक त्रुटि हो सकती है, संभवतः शून्य मान। –

+0

जब आप "डेटाबेस परत पर लॉगिंग" कहते हैं, तो क्या इसका मतलब है कि संग्रहित प्रक्रिया इनपुट पैरामीटर लॉग करती है, ताकि आप सत्यापित कर सकें कि कॉलम मानों का कोई मिलान नहीं हुआ है? –

+0

हां, मैंने हर जगह पूरी तरह से लॉगिंग जोड़ा है ताकि मैं देख सकूं कि जो कुछ भी पास हो गया है और विस्तार से बाहर हो गया है। – b0rg

उत्तर

1

मुझे लगता है कि इन सभी वर्षों के बाद मुझे जवाब देना होगा।

यह समस्या ओरेकल .Net ड्राइवरों में गहरी है। हमारे पास मात्रा क्षेत्र को एक आईएनटी के रूप में परिभाषित किया गया था। आंतरिक वास्तुकला के कारण मात्रा नकारात्मक या शून्य हो सकती है। 95% मामलों में मात्रा सकारात्मक पूर्णांक (जैसा होना चाहिए) था, लेकिन कभी-कभी समायोजन और अन्य कारकों के कारण यह शून्य या नकारात्मक हो सकता है।

मात्रा 1 मात्रा 0 मात्रा अशक्त मात्रा -1

काम करता है सही ढंग से:

तो अंत में मैं इसे कैसे आप डेटाबेस में अपने रिकॉर्ड डाल के क्रम का पता लगाया।

लेकिन इस मामले में:

मात्रा अशक्त मात्रा 1 मात्रा -1

पर "-1" मूल्य ओसीआई अमान्य तर्क के साथ झटका होगा।

मैंने ओरेकल पर टिकट बनाया, और इसे ठीक करने के लिए हमारी उत्पाद टीम को भेज दिया। तब से मैं आगे बढ़ गया, इसलिए यह भी सुनिश्चित नहीं है कि यह कब और कब तय किया गया था।

+1

बस 12 सी ओडीपी.Net की कोशिश की और बग अभी भी वहां प्रतीत होता है। तो ऐसा लगता है कि उन्होंने इसे ठीक नहीं किया है, क्योंकि हम इसे अपने आवेदन में लगातार डुप्लिकेट कर सकते हैं। – dcp

+1

उस समय मेरी परियोजना छोटी थी, इसलिए मैंने इसे ओरेकल के साथ पीछा नहीं किया। यदि आपके पास समय और ओरेकल समर्थन योजना है तो आप इसे साथ धक्का देने का प्रयास कर सकते हैं। या तो, या QTY के साथ एक कड़वाहट गैर शून्य है। – b0rg

+1

हमारे पास समय नहीं है :)। वैसे भी, मुझे पता चला कि जब हम नए प्रबंधित ओरेकल डीएल का उपयोग करते हैं तो हमें बग का अनुभव नहीं होता है (उदाहरण के लिए यह Oracle.ManagedDataAccess.dll है)। तो समस्या डीएल के अप्रबंधित संस्करणों तक सीमित है (उदा। Oracle.DataAccess.dll)। वैसे भी, इस पर आपकी पोस्ट के लिए धन्यवाद, यह जानना हमेशा अच्छा होता है कि किसी और को वही समस्या है जो आप हैं :)। – dcp

0

इसके लायक होने के लिए, मुझे बस इस त्रुटि का सामना करना पड़ा। यह समस्या मेरे पैरामीटर में से एक में OracleType गलत थी। इस प्रकार को NVarchar पर सेट किया गया था और डेटाबेस कॉलम को Clob में बदल दिया गया था।

स्पष्ट रूप से अपने पैरामीटर OracleType को परिभाषित करने का प्रयास करें।

OracleParameter(string name, OracleType oracleType) 
3

मुझे यह वही त्रुटि संदेश प्राप्त हो रहा था। मेरे मामले में ऐसा इसलिए था क्योंकि मैं एक सीएलओबी कॉलम में एक खाली स्ट्रिंग पास कर रहा था। आम तौर पर मैं एक बड़ा एक्सएमएल दस्तावेज़ पास करता हूं लेकिन कभी-कभी कोई दस्तावेज़ नहीं था। अब, मैं खाली स्ट्रिंग की जांच करता हूं और "खाली" लिखता हूं।

-1

डेटा प्रकार nchar(2) के साथ एक शून्य कॉलम मेरे लिए समस्या थी। यह शून्य स्वीकार नहीं करता है, लेकिन डेटा डालने के दौरान कुछ मानों को पारित करने की आवश्यकता है।

+0

यदि आपने एक उदाहरण प्रदान किया है तो यह शायद एक बेहतर जवाब होगा। – Nae

संबंधित मुद्दे