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

forall plsql में त्रुटि कैसे पकड़ें?

मुझे लगता है कि आप एक save exceptions रखना चाहते हैं आपके bulk collect . में ।

DECLARE
  TYPE dataDate IS TABLE OF DATE;
  l_dataDate dataDate;

  dml_errors EXCEPTION;
  PRAGMA exception_init(dml_errors, -24381);
BEGIN
  select data1 
    BULK COLLECT INTO l_dataDate 
    from USER.TABLE_DATA;

BEGIN
  FORALL i IN l_dataDate.FIRST..l_dataDate.LAST SAVE EXCEPTIONS
    INSERT INTO USER.DIMDATE 
      SELECT
          to_number(to_char(l_dataDate(i), 'YYYYMMDDHH24MISS')),
          to_number(to_char(l_dataDate(i), 'YYYYMMDD')),
          l_dataDate(i),
          to_number(to_char(l_dataDate(i), 'DD')),
          to_char (l_dataDate(i), 'Day'),
          to_number(to_char (l_dataDate(i), 'MM')),
          to_char (l_dataDate(i), 'Month'),
          to_number(to_char(l_dataDate(i), 'YYYY'))  
     FROM DUAL
    WHERE NOT EXISTS (SELECT 1 
                        FROM USER.DIMDATE 
                       WHERE COD_FECHA=to_number(
                                         to_char(l_dataDate(i), 
                                                 'YYYYMMDDHH24MISS'))); 
EXCEPTION 
  WHEN dml_errors
  THEN
    FOR i IN 1..sql%bulk_exceptions.count
    LOOP
      <<do something with the exceptions>>
    END LOOP;
END;

ऐसा कुछ के लिए, हालांकि, पीएल/एसक्यूएल का उपयोग करने का कोई कारण नहीं है। बस एक ही INSERT लिखें स्टेटमेंट संभवतः डीएमएल त्रुटि लॉगिंग के साथ यदि table_data अमान्य डेटा है जिसे लॉग करने की आवश्यकता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पहले 150 पंक्तियों का चयन करें, फिर अगले 150 और इसी तरह?

  2. टॉड टूल के साथ sys_refcursor आउटपुट pl sql कैसे प्रदर्शित करें

  3. Oracle - मौजूद न होने पर ही एक इंडेक्स बनाएं

  4. Oracle SQL क्वेरी के साथ पहले संख्याओं के आधार पर कैसे छाँटें?

  5. Oracle 11g PHP oci_connect OCIEnvNlsCreate () में विफल रहता है