आप इसे error_logging_clause के साथ कर सकते हैं। . (लिंक डालने के लिए है क्योंकि मर्ज यह कहता है कि इसका व्यवहार डालने जैसा ही है।
आपके मामले के लिए:
-- You create your Log Table
EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('copy_emp', 'TAB_ERR_COPY_EMP');
MERGE INTO copy_emp c
USING employees e
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET
c.first_name = e.first_name,
c.last_name = e.last_name,
c.email = e.email,
c.phone_number = e.phone_number,
c.hire_date = e.hire_date,
c.job_id = e.job_id,
c.salary = e.salary,
c.commission_pct = e.commission_pct,
c.manager_id = e.manager_id,
c.department_id = e.department_id
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.first_name, e.last_name,
e.email, e.phone_number, e.hire_date, e.job_id,
e.salary, e.commission_pct, e.manager_id,
e.department_id)
LOG ERRORS INTO TAB_ERR_COPY_EMP('TAG_STATEMENT') REJECT LIMIT 100;
कृपया ध्यान दें कि error_logging_clause की कुछ सीमाएँ हैं। दस्तावेज़ीकरण से :
-
निम्न स्थितियों के कारण कथन विफल हो जाता है और त्रुटि लॉगिंग क्षमता को लागू किए बिना वापस रोल हो जाता है:
-
आस्थगित बाधाओं का उल्लंघन किया।
-
कोई भी सीधा-पथ INSERT या MERGE ऑपरेशन जो एक अद्वितीय बाधा या अनुक्रमणिका उल्लंघन करता है।
-
कोई भी अपडेट ऑपरेशन UPDATE या MERGE जो एक अद्वितीय बाधा सूचकांक उल्लंघन को बढ़ाता है)।
-
-
आप LONG, LOB, orobject प्रकार के स्तंभों के लिए त्रुटि लॉगिंग तालिका में त्रुटियों को ट्रैक नहीं कर सकते। हालांकि, तालिका जो डीएमएल ऑपरेशन का लक्ष्य है, उसमें इस प्रकार के कॉलम हो सकते हैं।
-
यदि आप संबंधित त्रुटि लॉगिंग तालिका बनाते हैं या संशोधित करते हैं ताकि इसमें एक असमर्थित प्रकार का कॉलम हो, और यदि उस कॉलम का नाम लक्ष्य डीएमएल तालिका में एक असमर्थित कॉलम से मेल खाता है, तो डीएमएल स्टेटमेंट पार्स समय पर विफल हो जाता है।
-
यदि त्रुटि लॉगिंग तालिका में कोई असमर्थित कॉलम प्रकार नहीं है, तो सभी डीएमएल त्रुटियां तब तक लॉग की जाती हैं जब तक कि त्रुटियों की अस्वीकृति सीमा तक नहीं पहुंच जाती। उन पंक्तियों के लिए जिन पर त्रुटियाँ होती हैं, त्रुटि लॉगिंग तालिका में संगत स्तंभों वाले स्तंभ मान नियंत्रण जानकारी के साथ लॉग किए जाते हैं।
-