एकमात्र तरीका (मुझे पता है) यह पता लगाने के लिए कि कौन सी पंक्ति समस्या का कारण बनती है, ओरेकल की "लॉग त्रुटियों में" सुविधा का उपयोग करना है। इस तरह insert
कोई अपवाद नहीं फेंकेगा और किसी भी बाधा का उल्लंघन करने वाली कोई भी पंक्ति निर्दिष्ट त्रुटि तालिका में लिखी जाएगी।
ऐसा करने के लिए आपको सबसे पहले एक लॉग टेबल बनानी होगी जिसमें अस्वीकृत पंक्तियाँ हों:
EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('BD_VEHICLES_TEMP');
इससे ERR$_BD_VEHICLES_TEMP
. नाम की एक टेबल बनेगी
फिर रन करें अपना स्टेटमेंट इसमें बदलें:
insert into bd_vehicles_temp
select *
from bd_vehicles_temp_1
LOG ERRORS REJECT LIMIT UNLIMITED;
एक पंक्ति बाधाओं को मान्य करने में विफल होने पर भी कथन जारी रहेगा। विवरण समाप्त होने के बाद आप तालिका की सामग्री की जांच कर सकते हैं ERR$_BD_VEHICLES_TEMP
उन पंक्तियों के लिए जिन्होंने त्रुटि संदेश और मानों सहित बाधा का उल्लंघन किया है।
(संपादित करें):यदि आप पहली त्रुटि पर रुकना चाहते हैं (और इसे लॉग तालिका में देखें), तो REJECT LIMIT UNLIMITED
छोड़ दें खंड।
अधिक विवरण मैनुअल में हैं:
- DBMS_ERRLOG के लिए http://docs। oracle.com/cd/B28359_01/appdev.111/b28419/d_errlog.htm#CEGBBABI
- लॉग त्रुटियों के लिए खंड में:http ://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9014.htm#BGBEIACB