7 Stimmen

Wie kann man feststellen, ob eine Zeile/Wert einen Fehler in einer PL/SQL-Anweisung verursacht?

(Oracle PL/SQL)

Wenn ich eine einfache SQL-Anweisung habe, die einen Fehler auslöst, d.h.:

DECLARE
    v_sql_errm varchar2(2048);
BEGIN
    UPDATE my_table SET my_column = do_something(my_column)
        WHERE my_column IS NOT NULL;
EXCEPTION
    when others then
        -- How can I obtain the row/value causing the error (unknown)?
        v_sql_errm := SQLERRM;
        insert into log_error (msg) values ('Error updating value (unknown): '||
             v_sql_errm);
END;

Gibt es eine Möglichkeit, innerhalb des Ausnahmeblocks die Zeile/den Wert zu bestimmen, bei der/dem die Abfrage auf einen Fehler stößt? Ich möchte den Fehler protokollieren können, damit ich dann den spezifischen Datenwert, der den Fehler verursacht, ändern/korrigieren kann.

1 Stimmen

Ausgehend von den nachstehenden Antworten scheint es keine Möglichkeit zu geben, die tatsächliche Zeile/den tatsächlichen Wert, die den Fehler verursachen, zu ermitteln. Die beste Lösung scheint die Iteration mit einer FOR-Schleife zu sein.

0 Stimmen

0voto

Manuel Ferreria Punkte 1206

PL/SQL definiert 2 globale Variablen, um auf Fehler zu verweisen:

SQLERRM : SQL-Fehlermeldung

SQLERRNO: SQL-Fehlernummer

Dies ist im EXCEPTION-Block in Ihrem PL/SQL lesbar.

DECLARE 
    x number;
BEGIN
    SELECT 5/0 INTO x FROM DUAL;
EXCEPTION
    WHEN OTHERS THEN:
        dbms_output.put_line('Error Message: '||SQLERRM);
        dbms_output.put_line('Error Number: '||SQLERRNO);
END;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X