2012-07-06 37 views
7

Tôi thấy điều này sau khi nâng cấp từ Oracle 11g Release 1 đến Thả 2.Oracle 11g Release 1 vs 2 - hành vi khác nhau của LEFT OUTER JOIN

Điều tốt nhất tôi có thể tóm tắt nó ngay bây giờ là một LEFT OUTER JOIN chống lại một truy vấn với một cột "giả" không đổi và một mệnh đề WHERE tạo ra các kết quả khác nhau trong hai Oracle RELEASES. Trong Bản phát hành 2, cột "giả" hiển thị trong các hàng chưa được đối sánh:

TEST1  TEST2 
=====  ===== 
A B  A B 
- ---  - --- 
1 bar  1 hello 
2 baz 

> SELECT * FROM test1 LEFT OUTER JOIN test2 ON test1.a = test2.a; 
    A B A_1 B_1 
    - --- --- ----- 
    1 bar 1 hello 
    2 baz 

Cho đến giờ, rất tốt. tất cả các công trình trên đều giống nhau trên Rel. 1 và 2. Bây giờ, thêm một 'giả' cột X không đổi, và mọi thứ làm việc như mong đợi:

> SELECT * 
    FROM test1 
    LEFT OUTER JOIN (SELECT test2.*, 'X' AS X 
         FROM test2) test3 
     ON test1.a = test3.a; 

    A B A_1 B_1 X 
    - --- --- ----- - 
    1 bar 1 hello X 
    2 baz 

Bây giờ, thêm một điều khoản WHERE trên bảng đầu tiên và nhận được khác nhau kết quả:

> SELECT * 
    FROM test1 
    LEFT OUTER JOIN (SELECT test2.*, 'X' AS X 
         FROM test2) test3 
     ON test1.a = test3.a 
    WHERE test1.b LIKE 'ba%'; 

    Release 11.1.0.7.0  Release 11.2.0.2.0  
    ==================  ================== 
    A B A_1 B_1 X   A B A_1 B_1 X 
    - --- --- ----- -   - --- --- ----- - 
    1 bar 1 hello X   1 bar 1 hello X 
    2 baz      2 baz   X <--- WHAT'S THIS?! 

tiếp tục bối rối: nếu điều kiện WHERE là số (ví dụ, WHERE test1.a < 5, kết quả đều giống nhau

UPDATE (để làm rõ câu hỏi thực tế của tôi): Tôi đang làm gì sai? Truy vấn cuối cùng của tôi bằng cách nào đó gọi một hành vi không xác định làm cho nó OK cho Oracle để thay đổi những gì được trả về từ một bản phát hành tiếp theo? Nếu không, đây có phải là lỗi của Oracle không?

+0

Nếu đó là câu hỏi, nó không thực sự rõ ràng. –

+0

@dystroy, tôi đã thêm bản cập nhật, cố gắng đặt câu hỏi của mình rõ ràng. – Arkady

+0

Mức độ chi tiết này có thể phù hợp hơn với stackexchange DBA. –

Trả lời

0

Vì vậy, tôi sẽ trả lời câu hỏi của riêng tôi, cụ thể là: "Tôi có làm điều gì đó sai hoặc đây có phải là lỗi của Oracle không?" với Đây là lỗi Oracle.

tôi để nó tùy thuộc vào bạn để di chuyển sự điên rồ được biết đến như support.oracle.com, nhưng, như đã chỉ ra bởi @AdamHawkes, lỗi này là lẽ đề cập đến trong một bản vá bộ Oracle gần đây. Một vài lỗi trong ghi chú phát hành đến 11.2.0.3 có vẻ tương tự như vấn đề của tôi, mặc dù không chính xác như nhau.

Tôi sẽ cố gắng quay lại đây và cập nhật câu trả lời khi tôi nhận được các bản vá lỗi mới nhất được áp dụng (Tôi đang ở trong một môi trường mà tôi không kiểm soát được điều này).

0

Chỉ cần liên kết trong một số bài viết liên quan cho độc giả khác ..

https://forums.oracle.com/forums/thread.jspa?threadID=1113096

Strange behaviour of full outer join in Oracle - how it could be explained?

Chủ yếu là đề nghị thay đổi phiên để tắt tối ưu hóa cụ thể. thay đổi tập hợp phiên "_optimizer_join_elimination_enabled" = false; thay đổi tập hợp phiên "_optimizer_native_full_outer_join" = off;

Tôi muốn họ có các bài kiểm tra tự động chứng tỏ những điều đơn giản đã hoạt động và không chỉ giới thiệu những lỗi này ngay từ đầu.

Các vấn đề liên quan