आपकी डेटा फ़ाइल में अतिरिक्त, अदृश्य वर्ण हैं। हम मूल को नहीं देख सकते हैं लेकिन संभवतः इसे विंडोज़ में बनाया गया था और इसमें सीआरएलएफ नई लाइन विभाजक; और आप UNIX/Linux वातावरण में SQL*Loader चला रहे हैं जो केवल लाइन फीड (LF) की अपेक्षा कर रहा है। कैरिज रिटर्न (सीआर) वर्ण अभी भी फ़ाइल में हैं, और Oracle उन्हें फ़ाइल में ज़िप फ़ील्ड के भाग के रूप में देख रहा है।
अंतिम पंक्ति में CRLF (या कोई नई-पंक्ति मार्कर) नहीं है, इसलिए उस पंक्ति पर - और केवल वह पंक्ति - ज़िप फ़ील्ड को 5 वर्णों के रूप में देखा जा रहा है, अन्य सभी के लिए इसे छह के रूप में देखा जा रहा है, उदा। 98001^M
।
आप दस्तावेज़ में डिफ़ॉल्ट व्यवहार के बारे में अधिक पढ़ सकते हैं :
यदि आप डेटा फ़ाइल को vi या vim जैसे संपादन में खोलते हैं, तो आपको वे अतिरिक्त ^M
दिखाई देंगे नियंत्रण वर्ण।
इसे ठीक करने के कई तरीके हैं। आप फ़ाइल को संशोधित कर सकते हैं; ऐसा करने के लिए सबसे आसान काम है डेटा को उस वातावरण में बनाई गई नई फ़ाइल में कॉपी और पेस्ट करें जिसमें आप SQL*Loader चलाएंगे। यदि आप चाहें तो लाइन एंडिंग्स को कनवर्ट करने के लिए उपयोगिताएं हैं, उदा। dos2unix
. या आपका विंडोज एडिटर बिना सीआर के फाइल को सेव करने में सक्षम हो सकता है। जैसा कि डिट्टो ने सुझाव दिया था, आप डेटा फ़ाइल में एक अतिरिक्त फ़ील्ड डिलीमीटर भी जोड़ सकते हैं।
या आप INFILE
. को बदलकर SQL*Loader को CRLF की अपेक्षा करने के लिए कह सकते हैं पंक्ति:
LOAD DATA
INFILE Customer.dat "str '\r\n'"
INTO TABLE Customer
...
... हालांकि, यदि आप सीआर वर्णों के बिना, लिनक्स में बनाई गई फ़ाइल की आपूर्ति करते हैं तो यह समस्या पैदा करेगा।