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

ORA-01722:Ugyldigt nummer, find specifik linje

De fleste SQL-klienter vil rapportere den linje og kolonne, hvor fejlen skete. Hvis du ikke har en god IDE ved hånden, så brug DBMS_SQL .

SQL-klient

De fleste SQL IDE'er vil fremhæve linje- og kolonnenummeret for fejlen. Selv SQL*Plus viser præcis, hvor fejlen ugyldigt tal opstår:

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

(Desværre leverer Oracle SQL Developer ikke denne funktionalitet.)

DBMS_SQL

Hvis dit valg af SQL-værktøjer er begrænset, kan du stadig finde det relevante linjenummer ved hjælp af 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

(Dette svar forudsætter, at du direkte kan køre SQL-sætningen. Hvis fejlen er en del af et PL/SQL-program, så er der ingen nem måde at finde linjenummeret i en SQL-sætning i efterhånden, medmindre du er i stand til at køre den igen gennem DBMS_SQL . Den nøjagtige kontekst er vigtig her.)



  1. Hvordan indsætter du en PHP-konstant i en SQL-forespørgsel?

  2. Rækkemønstergenkendelse i SQL

  3. Sådan ændres datoformatet i din Oracle-session

  4. MariaDB DATABASE() Forklaret