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.)