Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORA-01722:Ungültige Nummer, bestimmte Zeile suchen

Die meisten SQL-Clients melden die Zeile und Spalte, in der der Fehler aufgetreten ist. Wenn Sie keine gute IDE zur Hand haben, verwenden Sie DBMS_SQL .

SQL-Client

Die meisten SQL-IDEs heben die Zeilen- und Spaltennummer des Fehlers hervor. Sogar SQL*Plus zeigt genau, wo der Fehler wegen ungültiger Zahl auftritt:

SQL> select *
  2  from dual
  3  where 1 = 1
  4  and 1 = 'a'
  5  and 2 = 2;
and 1 = 'a'
        *
ERROR at line 4:
ORA-01722: invalid number

(Leider bietet Oracle SQL Developer diese Funktionalität nicht.)

DBMS_SQL

Wenn Ihre Auswahl an SQL-Tools begrenzt ist, können Sie die relevante Zeilennummer immer noch mit DBMS_SQL.LAST_ERROR_POSITION finden .

declare
    v_sql clob := q'[
        select *
        from dual
        where 1 = 1
            and 1 = 'a'
            and 2 = 2
    ]';
    v_cursor integer;
    v_ignore number;
begin
    v_cursor := dbms_sql.open_cursor;
    dbms_sql.parse(v_cursor, v_sql, dbms_sql.native);
    v_ignore := dbms_sql.execute(v_cursor);
exception when others then
    dbms_output.put_line(sqlerrm);
    dbms_output.put_line('Error starts here: '||
        substr(v_sql, dbms_sql.last_error_position));
end;
/

Results:
ORA-01722: invalid number
Error starts here:  'a'
            and 2 = 2

(Bei dieser Antwort wird davon ausgegangen, dass Sie die SQL-Anweisung direkt ausführen können. Wenn der Fehler Teil eines PL/SQL-Programms ist, gibt es im Nachhinein keine einfache Möglichkeit, die Zeilennummer in einer SQL-Anweisung zu finden, es sei denn, Sie können sie ausführen wieder durch DBMS_SQL . Hier ist der genaue Kontext wichtig.)