Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Czy istnieje oficjalna rekomendacja Oracle dotycząca używania jawnych złączeń ANSI JOIN w porównaniu ze złączeniami niejawnymi?

Istnieje wiele uwag ze strony Oracle Support na temat problemów ze składnią łączenia ANSI z obejściami zalecającymi użycie składni Oracle.

Bug 5188321 błędne wyniki (brak wierszy) LUB ORA-1445 z połączenia zewnętrznego 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.

Błąd 5368296 ANSI join SQL może nie zgłaszać ORA-918 dla niejednoznacznej kolumny

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;

Błąd 7670135 Długi czas parsowania podczas kompilowania połączenia 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

Z Oracle Press - Oracle OCP 11g wszystko w jednym przewodniku egzaminacyjnym

I od asktoma (który nie zobowiązuje)

 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. 

Zobacz także wcześniejsze pytanie na ten sam temat. Różnica między notacją Oracle plus (+) a notacją ansi JOIN?

Znalazłem również to oświadczenie w dokumencie, ale nie ma odniesienia do tego, skąd pochodzi

„Począwszy od Oracle 9i, Oracle zaleca programistom SQL używanie składni łączenia ANSI zamiast zastrzeżonej składni Oracle (+). Jest kilka powodów tego zalecenia, w tym:

• Łatwiejsze segregowanie i odczytywanie (bez mieszania kodu łączenia z kodem restrykcyjnym) • Łatwiejsze konstruowanie poprawnego kodu łączenia (szczególnie w przypadku złączeń „zewnętrznych”) • Przenośna składnia będzie działać we wszystkich innych bazach danych zgodnych z ANSI, takich jak MS SQL Server , DB2, MySQL, PostgreSQL i in.• Ponieważ jest to powszechnie akceptowany standard, jest on ogólnym celem dla wszystkich przyszłych baz danych i narzędzi dostawców zewnętrznych• Zastrzeżona składnia Oracle External-join (+) może być używana tylko w jednym kierunku w raz, nie może wykonać pełnego sprzężenia zewnętrznego. • Plus te dodatkowe ograniczenia z dokumentacji Oracle:o Operator (+) może być zastosowany tylko do kolumny, a nie do dowolnego wyrażenia. Jednak dowolne wyrażenie może zawierać jedną lub więcej kolumn oznaczonych operatorem (+). o Warunek zawierający operator (+) nie może być połączony z innym warunkiem za pomocą operatora logicznego OR. o Warunek nie może używać warunku porównania IN do porównaj kolumnę oznaczoną operatorem (+) z wyrażeniem.o Warunek nie może porównać żadnej kolumny oznaczonej operatorem (+) z podzapytaniem."

Nadszedł więc czas, aby przyjąć składnię złączeń ANSI – i przenieść się w XXI wiek



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Załaduj arkusz danych Excel do bazy danych Oracle

  2. Jak zmienić format daty w sesji Oracle

  3. wiersz numer nie wyświetla żadnych wierszy podczas używania między słowem kluczowym

  4. Nowa funkcja Oracle 18c:modyfikacja partycjonowania online

  5. 4 sposoby na zmianę strefy czasowej w Oracle