2012-10-25 17 views
5

मैं साथ iSeries/डीबी 2 बहुत परिचित नहीं हूँ। हालांकि, मैं ऐसी वेबसाइट पर काम करता हूं जो इसे अपने प्राथमिक डेटाबेस के रूप में उपयोग करता है।मैं एक अपवाद "[SQL0802] डेटा डेटा मानचित्रण त्रुटि के रूपांतरण" क्यों मिल रहा है?

एक नया स्तंभ हाल ही में एक मौजूदा तालिका में जोड़ा गया था।

Type: S 
Length: 9 
Dec: 2 

यह मुझसे कहता है यह दशमलव बिंदु से पहले 6 अंक, और दशमलव बिंदु के बाद 2 अंकों के साथ संख्यात्मक फ़ील्ड है: जब मैं यह AS400 के माध्यम से देख सकते हैं, मैं निम्नलिखित डेटा प्रकार देखते हैं।

जब मैं एक साधारण चयन (SELECT MYCOL FROM MYTABLE) के साथ डेटा पूछता हूं, तो मुझे बिना किसी समस्या के सभी रिकॉर्ड वापस मिलते हैं। हालांकि, जब मुझे लगता है कि उसी स्तंभ मैं निम्न अपवाद मिल पर एक DISTINCT, GROUP BY, या ORDER BY प्रयोग करके देखें:

[SQL0802] Data conversion of data mapping error 

मैं कम से कम एक रिकॉर्ड अमान्य डेटा है कि निष्कर्ष निकाला है - क्या मेरी डीबीए कॉल "कारतूस" या "4 ओ"। यद्यपि यह कैसे संभव है? डेटाबेस को अपवाद फेंकना नहीं चाहिए जब उस कॉलम में अमान्य डेटा को जोड़ने का प्रयास किया जाता है?

क्या कोई तरीका है कि मैं इसके आसपास हो सकता हूं, जैसे कि मेरी क्वेरी में उन खराब रिकॉर्ड को फ़िल्टर करना?

+4

एक ज़ोन संख्यात्मक (9,2) कॉलम दशमलव बिंदु के बाईं ओर 7 अंक होगा (यानी 9 शून्य 2) – WarrenT

+0

आपके SQL0802 संदेश के दूसरे स्तर के टेक्स्ट में दिखाए गए त्रुटि प्रकार कोड क्या है? – WarrenT

+0

@WarrenT "SQLSTATE 22023" –

उत्तर

2

एकमात्र समाधान जो मुझे मिल सकता था वह एक स्क्रिप्ट लिखना था जो कॉलम में खाली मानों की जांच करता है और फिर उन्हें मिलने पर शून्य पर अपडेट करता है।

4

"4 ओ" का मतलब 0x40 है जो एक अंतरिक्ष या खाली चरित्र के लिए ईबीसीडीआईसी कोड है और रिकॉर्ड में किसी भी नई जगह में डिफ़ॉल्ट मान रखा गया है।

विरासत कार्यक्रम/संचालन दशमलव डेटा त्रुटि प्रस्तुत कर सकते हैं। उदाहरण के लिए नई फ़ाइल बनाया है और FMTOPT(*NOCHK) विकल्प के साथ CPYF आदेश का उपयोग कर भरा हुआ था यदि।

इसे ठीक करने का सबसे आसान तरीका फ़ाइल पढ़ने और रिकॉर्ड्स को सही करने के लिए एचएलएल प्रोग्राम (आरपीजी) लिखना है।

2

फ़ाइल रिकॉर्ड प्रारूप के स्तर का है, तो जाँच बंद कर दिया [अर्थात। LVLCHK(*NO)] या उस पर ओवरराइड किया गया है, फिर एक एचएलएल प्रोग्राम। (उदा। आरपीजी, कोबोल, आदि) है कि नए रिकॉर्ड के साथ कंपाइल नहीं किया गया था इस स्तंभ में अमान्य डेटा के साथ रिकॉर्ड बाहर लिख सकते हैं, खासकर अगर नया स्तंभ रिकॉर्ड के अंत में नहीं है।

सुनिश्चित करें कि इस फ़ाइल पर रिकॉर्ड्स लिखने या अपडेट करने के लिए देशी I/O का उपयोग करने वाले सभी प्रोग्राम पुनः संकलित किए गए हैं।

+0

जेम्स ने कहा, एक एचएलएल प्रोग्राम वर्तमान में त्रुटि में रिकॉर्ड को ठीक करने का सबसे आसान तरीका हो सकता है।लेकिन पुनरावर्ती त्रुटियों को रोकने के लिए, आपको उन प्रोग्रामों को पुन: संकलित करने की आवश्यकता होगी जो भौतिक फ़ाइल में रिकॉर्ड लिखते हैं या अपडेट करते हैं या इसके ऊपर कोई तार्किक है। – WarrenT

0

मैं पूर्णांक को कुंजी कॉलम को बल-कास्टिंग करके इस त्रुटि को हल करने में सक्षम था। मैं ... इस से शामिल होने के लिए बदल ...

FROM DAILYV INNER JOIN BXV ON DAILYV.DAITEM=BXV.BXPACK 

यह करने के लिए ...

FROM DAILYV INNER JOIN BXV ON CAST(DAILYV.DAITEM AS INT)=CAST(BXV.BXPACK AS INT) 

... और मुझे तालिकाओं के लिए कोई सुधार करना नहीं था। यह एक बहुत पुराना, बहुत गन्दा डेटाबेस है जिसमें बहुत सारे जंक हैं। मैंने कई सुधार किए हैं, लेकिन यह एक काम प्रगति पर है।

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

  • कोई संबंधित समस्या नहीं^_^