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

Số Oracle và tham gia varchar

Một lý do tại sao chuyển đổi ngầm định không thành công là khi cột varchar tham gia chứa dữ liệu không phải là số. Oracle xử lý số để tham gia varchar2 bằng cách chuyển đổi các chuỗi (xem trích dẫn của Gary trong nhận xét của anh ấy), vì vậy nó thực sự thực thi điều này:

select a.col1, b.somecol 
from tableA a inner join tableB b on to_number(b.col2)=a.col1;

Nếu tableB.col2 chứa các giá trị không phải là số - có vẻ như rất có thể, đó là một chuỗi - sau đó nó sẽ vượt qua ORA-01722: invalid number . Bằng cách truyền một cách rõ ràng cột số thành một chuỗi, bạn làm ngắn mạch hành vi mặc định của Oracle.

Thực tế là bạn không gặp vấn đề này trong hai môi trường đầu tiên của bạn là một vấn đề may mắn không phải là cấu hình. Nó có thể xảy ra bất cứ lúc nào vì nó chỉ yêu cầu một chuỗi không phải số để ngắt truy vấn. Vì vậy, thực sự bạn nên chạy với chuyển đổi rõ ràng trong tất cả các môi trường.

Đối với hiệu suất, bạn có thể tạo chỉ mục dựa trên chức năng ...

create index whatever_idx on tableA ( to_char(col1) )
/ 



  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ững điều bạn phải biết về Bảng FND_LOBS trong Ứng dụng Oracle

  2. Truy vấn tổng tối đa

  3. Sự khác biệt trong Oracle SQL:COUNT (*) so với Bộ kết quả thực tế

  4. Cách nhanh nhất để kiểm tra xem một số bản ghi trong một bảng cơ sở dữ liệu?

  5. Nhiều vấn đề về truy vấn tiên tri