Oracle
 sql >> база данни >  >> RDS >> Oracle

ORA-01722:Невалиден номер, намерете конкретен ред

Повечето SQL клиенти ще докладват реда и колоната, където е възникнала грешката. Ако не разполагате с добра IDE под ръка, използвайте DBMS_SQL .

SQL клиент

Повечето SQL IDE ще маркират номера на реда и колоната на грешката. Дори SQL*Plus показва точно къде възниква грешката с невалиден номер:

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

(За съжаление, Oracle SQL Developer не предоставя тази функционалност.)

DBMS_SQL

Ако изборът ви от SQL инструменти е ограничен, все още можете да намерите съответния номер на ред, като използвате 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

(Този отговор предполага, че можете директно да изпълните SQL израза. Ако грешката е част от PL/SQL програма, тогава няма лесен начин след факта да намерите номера на реда в SQL оператор, освен ако не можете да го изпълните отново чрез DBMS_SQL . Точният контекст е важен тук.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да промените структурата на таблицата в Oracle?

  2. Не може да се коригира Грешка:PL/SQL изразът е игнориран

  3. Доказване на еквивалентност на SQL заявка

  4. Разлика между Oracle DATE и TIMESTAMP

  5. Поведение по подразбиране за автоматично завършване на JDBC връзката