2017-04-12 28 views
0


Wir FORALL- verwenden ..... ABWEHR AUSNAHMEN. Am Ende der Schleife, haben wir diese:
FORALL- ...... RETTEN AUSNAHMEN

FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP<BR><BR> 
    DBMS_OUTPUT.PUT_LINE('ERROR CREATING STAGING TICKER: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE));<BR><BR> 
    DBMS_OUTPUT.PUT_LINE('INDEX INFO: ' || SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);<BR> 
END LOOP; 

Gibt es eine Möglichkeit für mich zu Ist-Werte in diesem Array zu bekommen? Sagen Sie, wenn die E-Mail-Adresse eines Kunden zu lang war ... um tatsächlich den Wert anzuzeigen, der den Fehler verursacht hat? Eher als nur eine Indexnummer?

Danke!

+0

Der 'ERROR_INDEX' Sie den Index der ursprünglichen Sammlung gibt, die fehlgeschlagen. Können Sie einfach zu dieser Sammlung zurückkehren, um den tatsächlichen Wert zu erhalten? –

Antwort

1

Sie können die Schleifenvariable i verwenden, um den Inhalt des Arrays exception in Ihrem Fall anzuzeigen. Im folgenden sehen Sie ein Beispiel vor:

CREATE OR REPLACE PROCEDURE PROC1 (V_EMP_ID DBMS_SQL.NUMBER_TABLE) 
IS 
    lv_error_string VARCHAR2(4000); 
BEGIN 
    FORALL INDX IN V_EMP_ID.FIRST..V_EMP_ID.LAST SAVE EXCEPTIONS 
    UPDATE EMPLOYEES 
    ---trying to rasie an exception by using a calculation 
    SET SALARY=SALARY * 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 
    WHERE ID_E= V_EMP_ID(INDX); 

EXCEPTION 
    WHEN OTHERS 
    THEN 
    FOR i IN 1 .. SQL%BULK_EXCEPTIONS.COUNT 
    LOOP 
     ---Am printing the value of the exception array. 
     dbms_output.put_line('exception Raised for record' ||V_EMP_ID(i));   

    END LOOP; 
END; 
/

Ouput:

SQL> DECLARE 
    empid DBMS_SQL.NUMBER_TABLE; 
    BEGIN 
    empid (1) := 1; 
    empid (2) := 9; 

    PROC1 (empid); 
    END; 

/
exception Raised for record 1 

PL/SQL procedure successfully completed. 
+0

Aber kann ich tatsächliche Werte sehen? Wie die Aufzeichnung, die das Problem verursacht hat. Kann ich diese Werte erreichen? –

+0

Ich habe den eigentlichen Datensatz selbst ausgedruckt. Wenn Sie mein Beispiel sehen, übergebe ich empid als Array. Und das ist nur in der Ausnahme gedruckt. Wenn Ihre Sammlung Spalten wie xyx hat, können Sie ' (i) .xyz' verwenden. In meinem Fall wäre es, wenn es einige Spalten gewesen wäre, "V_EMP_ID (i) .emp_id" gewesen – XING