A maioria dos clientes SQL relatará a linha e a coluna em que o erro ocorreu. Se você não tiver um bom IDE à mão, use
DBMS_SQL
. Cliente SQL
A maioria dos IDEs SQL destacará o número da linha e da coluna do erro. Até o SQL*Plus mostra exatamente onde ocorre o erro de número inválido:
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
(Infelizmente, o Oracle SQL Developer não fornece essa funcionalidade.)
DBMS_SQL
Se sua escolha de ferramentas SQL for limitada, você ainda poderá encontrar o número de linha relevante usando
DBMS_SQL.LAST_ERROR_POSITION
. 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
(Esta resposta pressupõe que você pode executar diretamente a instrução SQL. Se o erro for parte de um programa PL/SQL, não há uma maneira fácil de encontrar o número da linha dentro de uma instrução SQL, a menos que você possa executá-lo novamente através de
DBMS_SQL
. O contexto exato é importante aqui.)