sql >> Database teknologi >  >> RDS >> Oracle

Er der en officiel anbefaling fra Oracle om brugen af ​​eksplicitte ANSI JOINs vs implicitte joinforbindelser?

Der er en række bemærkninger fra Oracle Support-webstedet om problemer med ANSI join-syntaks med løsninger, der anbefaler at bruge Oracle-syntaksen.

Bug 5188321 forkerte resultater (ingen rækker) ELLER ORA-1445 fra ANSI outer join

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.

Bug 5368296 ANSI join SQL rapporterer muligvis ikke ORA-918 for tvetydig kolonne

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;

Bug 7670135 Lang parsetid, der kompilerer ANSI-forbindelse

 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

Fra Oracle Press - Oracle OCP 11g alt i én eksamensvejledning

Og fra asktom (som er uforpligtende)

 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. 

Se også tidligere spørgsmål om samme emne Forskel mellem Oracles plus (+) notation og ansi JOIN notation?

Jeg fandt også denne erklæring i et dokument, men ingen henvisning til, hvor den kom fra

"Fra og med Oracle 9i anbefaler Oracle, at SQL-udviklere bruger ANSI join-syntaksen i stedet for Oracle proprietære (+) syntaks. Der er flere grunde til denne anbefaling, herunder:

• Nemmere at adskille og læse (uden at blande join versus restriktionskode) • Lettere at konstruere joinkode korrekt (især i tilfælde af "ydre" joins)• Bærbar syntaks vil fungere på alle andre ANSI-kompatible databaser, såsom MS SQL Server , DB2, MySQL, PostgreSQL, et al• Da det er den universelt accepterede standard, er det det generelle mål for alle fremtidige database- og tredjepartsleverandørers værktøjer• Den proprietære Oracle outer-join (+) syntaks kan kun bruges i én retning på en gang, kan den ikke udføre en fuld ydre joinforbindelse• Plus disse yderligere begrænsninger fra Oracle-dokumentationen:o Operatoren (+) kan kun anvendes på en kolonne, ikke på et vilkårligt udtryk. Et vilkårligt udtryk kan dog indeholde en eller flere kolonner markeret med (+)-operatoren.o En betingelse, der indeholder (+)-operatoren, kan ikke kombineres med en anden betingelse ved hjælp af den logiske OR-operator.o En betingelse kan ikke bruge IN-sammenligningsbetingelsen til at sammenligne en kolonne markeret med (+) operatoren med et udtryk.o En betingelse kan ikke sammenligne nogen kolonne markeret med (+) operatoren med en underforespørgsel."

Derfor er det tid til at omfavne ANSI join-syntaksen – og bevæge sig ind i det 21. århundrede



  1. SQL Server 2014:Native backup-kryptering

  2. Sådan indstilles tegnsæt og sortering af en tabel i MySQL

  3. Rails:Postgres tilladelse nægtet til at oprette database på rake db:create:all

  4. Sådan udpakkes en understreng i MySQL