Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ORA-01722:Số không hợp lệ, tìm dòng cụ thể

Hầu hết các máy khách SQL sẽ báo cáo dòng và cột mà lỗi đã xảy ra. Nếu bạn không có IDE tốt, hãy sử dụng DBMS_SQL .

Máy khách SQL

Hầu hết các IDE SQL sẽ đánh dấu số dòng và cột của lỗi. Ngay cả SQL * Plus cũng hiển thị chính xác vị trí xảy ra lỗi số không hợp lệ:

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

(Rất tiếc, Oracle SQL Developer không cung cấp chức năng này.)

DBMS_SQL

Nếu lựa chọn công cụ SQL của bạn bị hạn chế, bạn vẫn có thể tìm thấy số dòng có liên quan bằng cách sử dụng 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

(Câu trả lời này giả sử bạn có thể chạy trực tiếp câu lệnh SQL. Nếu lỗi là một phần của chương trình PL / SQL, thì không có cách nào dễ dàng sau thực tế để tìm số dòng bên trong câu lệnh SQL, trừ khi bạn có thể chạy nó một lần nữa thông qua DBMS_SQL . Ở đây, ngữ cảnh chính xác rất quan trọng.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Định cấu hình Hibernate để sử dụng SYS_GUID () của Oracle cho Khóa chính

  2. Oracle - ORA-01489:kết quả của việc nối chuỗi quá dài

  3. Oracle - Làm cách nào để tạo một bảng có khóa duy nhất tự động bổ sung cho ID

  4. Làm cách nào để đặt BLOB lớn (hoặc ít nhất là không tầm thường) vào Oracle với JDBC?

  5. Truy vấn bên trong trên một bảng duy nhất với các điều kiện IN và NOT IN