Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ORA-01722:Nieprawidłowy numer, znajdź konkretną linię

Większość klientów SQL zgłosi wiersz i kolumnę, w której wystąpił błąd. Jeśli nie masz pod ręką dobrego IDE, użyj DBMS_SQL .

Klient SQL

Większość środowisk SQL IDE podświetli wiersz i kolumnę błędu. Nawet SQL*Plus pokazuje dokładnie, gdzie występuje błąd nieprawidłowej liczby:

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

(Niestety Oracle SQL Developer nie zapewnia tej funkcji.)

DBMS_SQL

Jeśli wybór narzędzi SQL jest ograniczony, nadal możesz znaleźć odpowiedni numer wiersza za pomocą 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

(Ta odpowiedź zakłada, że ​​możesz bezpośrednio uruchomić instrukcję SQL. Jeśli błąd jest częścią programu PL/SQL, nie ma łatwego sposobu na znalezienie numeru wiersza wewnątrz instrukcji SQL, chyba że jesteś w stanie go uruchomić ponownie przez DBMS_SQL . Dokładny kontekst jest tutaj ważny).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najlepszy wzorzec projektowy do zamykania połączenia z bazą danych w przypadku wystąpienia wyjątku

  2. pusty ciąg w wyroczni

  3. Uzyskaj dostępne godziny zajęć w zakresie dat

  4. PL/SQL:jak monitować użytkownika o wprowadzenie danych w procedurze?

  5. PLS-00103:Napotkano symbol końca pliku, gdy oczekiwano jednego z następujących:;