Tôi có một truy vấn tham gia hai bảng. Một bảng có một cột thuộc loại varchar và bảng kia có loại số. Tôi đã thực hiện truy vấn của tôi trên 3 cơ sở dữ liệu oracle, và đang thấy một số kết quả lạ tôi hy vọng có thể được giải thích. Trên hai cơ sở dữ liệu giống như các công trình sau đây.Số Oracle và tham số varchar
select a.col1, b.somecol
from tableA a inner join tableB b on b.col2=a.col1;
Trong bảng truy vấn nàyA.col1 là loại số và tableB.col2 thuộc loại varchar. Điều này làm việc tốt trong hai cơ sở dữ liệu nhưng không hoạt động trong cơ sở dữ liệu thứ ba. Trong lần thứ ba tôi nhận được (ORA-01722) lỗi. Trong lần thứ ba, tôi cần phải làm một cái gì đó như ...
select a.col1, b.somecol
from tableA a inner join tableB b on b.col2=to_char(a.col1);
Điều này làm việc trong tất cả các cơ sở dữ liệu. Câu hỏi tôi có là tại sao? Ở trên là một truy vấn được đơn giản hóa và truy vấn thực sự phức tạp hơn một chút và truy xuất rất nhiều dữ liệu, do đó phiên bản đầu tiên nhanh hơn nhiều. Nếu tôi có thể làm điều đó để làm việc trong mọi môi trường thì nó sẽ rất tuyệt.
Có ai biết lý do tại sao điều này có thể hoạt động trong một số cơ sở dữ liệu oracle và không phải những người khác không có dàn diễn viên trên kiểu dữ liệu? Có một cài đặt chung cho phép hành vi như vậy không?
Collation sẽ đoán đầu tiên của tôi. Oracle thường cho phép chuyển đổi ngầm, vì vậy có thể là một cột không chuyển đổi ẩn ... –
Bạn đã viết tất cả những từ đó và bạn vẫn không giải thích được chính xác * cách * truy vấn đầu tiên không hoạt động trong cơ sở dữ liệu thứ ba. – APC
Xin lỗi, tôi nhận được lỗi ORA-01722 trong truy vấn đầu tiên, cơ sở dữ liệu thứ ba – broschb