Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

रन टाइम त्रुटि:-2147217887(80040e21) सिस्टम ओराओएलईडीबी के लिए संदेश फ़ाइल में संदेश संख्या 0x80040e21 के लिए संदेश पाठ नहीं ढूंढ सकता है

इतने सारे मापदंडों के साथ, समस्या कोई भी . हो सकती है बेमेल डेटा प्रकार, डेटा लंबाई, आदि सहित एक आइटम। यहां डिबगिंग के रूप में जानी जाने वाली कला का प्रयोग किया जाना चाहिए।

  1. तालिका के डेटा प्रकारों की सावधानीपूर्वक जाँच करें (T_SAP_ZSSTABL_NEW ) Oracle में डेटा प्रकार हो सकते हैं जो तुरंत अनुवाद योग्य नहीं होते हैं एडीओ प्रकार जैसे BLOB , CLOB , BFILE , उच्च परिशुद्धता संख्यात्मक प्रकार, अधिकतम वर्ण प्रकार, या एक्सटेंशन प्रकार (XML, मीडिया, आदि)।

  2. डेटा की लंबाई बढ़ाने का प्रयास करें (या पैरामीटर असाइनमेंट में खाली छोड़ दें):

    Set MyParameter = cmd.CreateParameter("MATNR", adVarChar, adParamInput, 100, POSNR)
    
    Set MyParameter = cmd.CreateParameter("MATNR", adVarChar, adParamInput, , POSNR)
    

    यदि आवश्यक हो, तो VBA के Len() . के साथ परिवर्तनीय लंबाई की जांच करें पैरामीटर जोड़ने से पहले उपयोगकर्ता चेतावनी बढ़ाने के लिए।

  3. SELECT चलाने का प्रयास करें परिणामों की एक पंक्ति वापस करने के लिए समान पैरामीटर वाले क्वेरी का संस्करण। यदि वही त्रुटि होती है, तो पहले परम से शुरू करें, फिर समस्याग्रस्त वस्तु को अलग करने के लिए क्रमिक रूप से दूसरा या 10 का बैच जोड़ें।

    SELECT ? AS TSZ_CHARG_PARAM, ? AS TSZ_MATNR_PARAM, ? AS TSZ_MAKTX_PARAM,
           ...
    FROM T_SAP_ZSSTABL_NEW
    WHERE TSZ_VBELN = ? AND TSZ_POSNR = ?
    
  4. स्थिरता के लिए रिफैक्टर कोड, जैसा कि आपने एक को याद किया होगा या गलत तरीके से संरेखित किया होगा जो कई दोहराव वाली लाइनों के साथ हो सकता है। हमेशा DRY (डोंट रिपीट योरसेल्फ) कोड का लक्ष्य रखें। एक विकल्प शब्दकोश 160+ चर या नामित श्रेणियों के बजाय कुंजी/मान जोड़े के साथ:

    Dim key As Variant
    Dim paramDict As Object
    Set paramDict = CreateObject("Scripting.Dictionary")
    
    For ...
        paramDict.Add "KeyX", "ValueX"
    Next ...
    
    ...
    
    With cmd
      .ActiveConnection = myOracleConn
      .CommandText = strSQL
      .CommandType = adCmdText
    
      For Each key In  paramDict.Keys
         .Parameters.Append .CreateParameter(key, adVarChar, adParamInput, , paramDict(key))
      Next key
    
      .Execute
    End With
    

    यदि आपके पास मिश्रित प्रकार हैं, तो प्रत्येक प्रकार के लिए अलग-अलग शब्दकोश बनाने का प्रयास करें और पैरामीटर जोड़ने के क्रम में उन्हें पुनरावृत्त करें। और UPDATE समायोजित करें एक दूसरे के पास एक ही प्रकार के साथ। याद रखें UPDATE तालिका परिभाषा में स्तंभों के क्रम का पालन करने की आवश्यकता नहीं है।

  5. यदि संभव हो (या दीर्घकालिक समाधान), TSZ . की विस्तृत प्रारूप तालिका को फिर से डिज़ाइन करने पर विचार करें कॉलम लंबे प्रारूप के सामान्यीकृत रूप में।

    ID   POSNR   VBELN   Indicator   Value
     #     XXX     XXX       CHARG     XXX
     #     XXX     XXX       MATNR     XXX
     #     XXX     XXX       MAKTX     XXX
    ...
    

    हालांकि यह प्रत्येक विशिष्ट पहचानकर्ता के लिए 167 पंक्तियों को जोड़ देगा, डेटाबेस डिज़ाइन पंक्तियों में स्तंभों की तुलना में बहुत सस्ता है और इसलिए क्वेरी करना आसान होगा, और डेटा संग्रहण अधिक स्केलेबल, और रखरखाव अधिक कुशल होगा। उदाहरण के लिए, एक नए मीट्रिक को सभी मेटा जानकारी के साथ एक नए परिभाषित कॉलम की आवश्यकता नहीं होती है, बल्कि केवल एक नई पंक्ति की आवश्यकता होती है। और Oracle के PIVOT . के साथ आप आसानी से विस्तृत प्रारूप को फिर से प्रस्तुत कर सकते हैं।

कुल मिलाकर, डेटाबेस कनेक्शन जैसे एपीआई एक्सटेंशन से उत्पन्न रनटाइम त्रुटि को डीबग करने का कोई एकल, स्पष्ट तरीका नहीं है। एसक्यूएल सिंटैक्स या वीबीए ऑब्जेक्ट रेफरेंसिंग को आसानी से संभाला जा सकता है लेकिन डेटा-विशिष्ट मुद्दों को समग्र प्रक्रिया के माध्यम से रचनात्मक रूप से खोदने की आवश्यकता होती है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या Oracle/PL SQL में RSA का उपयोग करने का कोई तरीका है?

  2. SQL:दो तालिकाओं का संघ जिसमें पूर्ण स्तंभ मिलान नहीं है

  3. डेटाबेस तालिका को कैसे बाधित करें ताकि कॉलम में केवल एक पंक्ति का कोई विशेष मान हो?

  4. ट्रिगर जो त्रुटियों के साथ संकलित व्यक्ति तालिका में डालने या हटाने पर लॉग तालिका में पंक्ति सम्मिलित करता है

  5. मैं Oracle 10g में प्रत्येक वर्ष अनुक्रम के मान को स्वचालित रूप से 0 पर कैसे रीसेट करूं?