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

Có khuyến nghị chính thức của Oracle về việc sử dụng ANSI JOIN rõ ràng so với các phép nối ngầm không?

Có một số lưu ý từ trang Hỗ trợ của Oracle về các vấn đề với cú pháp nối ANSI với các giải pháp thay thế được đề xuất để sử dụng cú pháp oracle.

Lỗi 5188321 kết quả sai (không có hàng) HOẶC ORA-1445 từ kết nối bên ngoài ANSI

Versions affected: Versions >= 9.2.0.1 but < 11 

Description
Wrong results or an ORA-1445 can be returned with a query involving a 
 very large select list count when ANSI OUTER JOIN syntax is used.


Workaround
  Use native oracle outer join syntax 
 or 
  reduce the select list count.

Lỗi 5368296 ANSI tham gia SQL có thể không báo cáo ORA-918 cho cột không rõ ràng

Versions affected: Versions < 11

Description

****
Note: This fix introduces the problem described in bug 7318276
      One off fixes for that bug address the issue here also.
****      

ORA-918 is not reported for an ambiguous column in a query 
involving an ANSI join of more than 2 tables/objects. 

eg:
 -- 2 table join, returns ORA-918
 SELECT  empno 
 FROM emp a JOIN emp b  on a.empno = b.empno; 

 -- 3 table join does not report ORA-918 when it should ...
 SELECT  empno
 FROM emp a JOIN emp b on a.empno = b.empno
            JOIN emp c on a.empno = c.empno;

Lỗi 7670135 Thời gian phân tích cú pháp dài khi biên dịch tham gia ANSI

 Versions affected: Versions BELOW 11.2 

Description

A query having ANSI join(s) may take noticeable time during query compilation,
especially if the query includes an NVL() function.

Workaround:
 Use ORACLE join instead of ANSI join

Từ Oracle Press - Hướng dẫn thi tất cả trong một Oracle OCP 11g

Và từ asktom (người không cam kết)

 Historically there have been bugs related to ANSI syntax, in fact even the 
 10.2.0.4 projected issues list includes 10 bugs/issues related to ANSI syntax.

 In the past I've encountered some of these bugs myself, and have continued to use 
 and advocate the "traditional" Oracle style.

 I'd like to know if you feel that the implementation of ANSI syntax is now equally    
 robust compared  to the traditional syntax.

 Followup   February 19, 2008 - 5pm Central time zone:
 unfortunately, there are bugs in non-ansi joins too, probably more than 10 in fact.

 I personally do not use the new syntax (except in the rare case of a full outer join, 
 a truly rare beast to encounter). I have no comment on it really. 

Xem thêm câu hỏi trước đó về cùng chủ đề Sự khác biệt giữa ký hiệu cộng (+) của Oracle và ký hiệu ansi JOIN?

Tôi cũng tìm thấy tuyên bố này trong một tài liệu nhưng không có tham chiếu về nguồn gốc của nó

"Bắt đầu với Oracle 9i, Oracle khuyến nghị các nhà phát triển SQL sử dụng cú pháp nối ANSI thay vì cú pháp (+) độc quyền của Oracle. Có một số lý do cho khuyến nghị này, bao gồm:

• Dễ dàng tách biệt và đọc hơn (mà không trộn lẫn mã nối với mã hạn chế) • Dễ dàng hơn để tạo mã liên kết một cách chính xác (đặc biệt trong trường hợp liên kết “bên ngoài”) • Cú pháp di động sẽ hoạt động trên tất cả các cơ sở dữ liệu tuân thủ ANSI khác, chẳng hạn như MS SQL Server , DB2, MySQL, PostgreSQL ... một thời gian, nó không thể thực hiện một phép nối bên ngoài đầy đủ • Cộng với những hạn chế bổ sung này từ tài liệu Oracle:o Toán tử (+) chỉ có thể được áp dụng cho một cột chứ không phải cho một biểu thức tùy ý. Tuy nhiên, một biểu thức tùy ý có thể chứa một hoặc nhiều cột được đánh dấu bằng toán tử (+). so sánh một cột được đánh dấu bằng toán tử (+) với một biểu thức. o Một điều kiện không thể so sánh bất kỳ cột nào được đánh dấu bằng toán tử (+) với một truy vấn phụ. "

Vì vậy, đã đến lúc nắm bắt cú pháp nối ANSI - và chuyển sang thế kỷ 21



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sqlplus cách tìm chi tiết về phiên cơ sở dữ liệu hiện được kết nối

  2. Những điều bạn nên biết trước khi học Oracle

  3. Làm thế nào để có được ngày hôm qua trong Oracle

  4. Chia địa chỉ IPv4 thành 4 số trong Oracle sql

  5. Kiểu Java cho ngày / giờ khi sử dụng Oracle Date với Hibernate