sql >> Databasteknik >  >> RDS >> Oracle

ORA-01722:Ogiltigt nummer, hitta specifik rad

De flesta SQL-klienter kommer att rapportera raden och kolumnen där felet inträffade. Om du inte har en bra IDE till hands, använd DBMS_SQL .

SQL-klient

De flesta SQL IDE:er kommer att markera rad- och kolumnnumret för felet. Även SQL*Plus visar exakt var felet ogiltiga nummer inträffar:

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

(Tyvärr tillhandahåller inte Oracle SQL Developer denna funktion.)

DBMS_SQL

Om ditt val av SQL-verktyg är begränsat kan du fortfarande hitta det relevanta radnumret med 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

(Detta svar förutsätter att du kan köra SQL-satsen direkt. Om felet är en del av ett PL/SQL-program finns det inget enkelt sätt i efterhand att hitta radnumret i en SQL-sats, om du inte kan köra den igen genom DBMS_SQL . Det exakta sammanhanget är viktigt här.)



  1. Få returvärde från lagrad procedur i C#

  2. Hur man jämför prestanda för MySQL med SysBench

  3. Finns det en kapslingsgräns för korrelerade underfrågor i vissa versioner av Oracle?

  4. Fyll i rullgardinslistan beroende på ett annat rullgardinsval som använder Ajax