Oracle
 sql >> Database >  >> RDS >> Oracle

ORA-01722:Numero non valido, trova la riga specifica

La maggior parte dei client SQL riporterà la riga e la colonna in cui si è verificato l'errore. Se non hai un buon IDE a portata di mano, usa DBMS_SQL .

Client SQL

La maggior parte degli IDE SQL evidenzierà il numero di riga e di colonna dell'errore. Anche SQL*Plus mostra esattamente dove si verifica l'errore di numero non valido:

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

(Purtroppo Oracle SQL Developer non fornisce questa funzionalità.)

DBMS_SQL

Se la tua scelta di strumenti SQL è limitata, puoi comunque trovare il numero di riga pertinente utilizzando 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

(Questa risposta presuppone che tu possa eseguire direttamente l'istruzione SQL. Se l'errore fa parte di un programma PL/SQL, non esiste un modo semplice per trovare il numero di riga all'interno di un'istruzione SQL, a meno che tu non sia in grado di eseguirlo di nuovo tramite DBMS_SQL . Il contesto esatto è importante qui.)