Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Apakah ada rekomendasi resmi Oracle tentang penggunaan eksplisit ANSI JOIN vs implisit join?

Ada sejumlah catatan Dari situs Dukungan Oracle tentang masalah dengan ANSI bergabung dengan sintaks dengan solusi yang direkomendasikan untuk menggunakan sintaks oracle.

Bug 5188321 hasil yang salah (tidak ada baris) ATAU ORA-1445 dari 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 bergabung dengan SQL mungkin tidak melaporkan ORA-918 untuk kolom yang ambigu

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 Waktu penguraian yang lama saat mengompilasi ANSI bergabung

 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

Dari Oracle Press - Oracle OCP 11g semua dalam satu panduan ujian

Dan dari asktom (yang tidak berkomitmen)

 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. 

Lihat juga pertanyaan sebelumnya tentang topik yang samaPerbedaan antara notasi plus (+) Oracle dan notasi ANSI JOIN?

Saya juga menemukan pernyataan ini dalam sebuah dokumen tetapi tidak ada referensi dari mana asalnya

"Dimulai dengan Oracle 9i, Oracle merekomendasikan agar pengembang SQL menggunakan sintaks gabungan ANSI alih-alih sintaksis milik Oracle (+). Ada beberapa alasan untuk rekomendasi ini, termasuk:

• Lebih mudah untuk memisahkan dan membaca (tanpa mencampur kode gabungan versus kode pembatasan)• Lebih mudah untuk membuat kode gabungan dengan benar (terutama dalam kasus gabungan "luar")• Sintaks portabel akan bekerja pada semua database yang sesuai dengan ANSI lainnya, seperti MS SQL Server , DB2, MySQL, PostgreSQL, et al• Karena merupakan standar yang diterima secara universal, ini adalah target umum untuk semua database masa depan dan alat vendor pihak ketiga• Sintaks outer-join (+) Oracle yang dipatenkan hanya dapat digunakan dalam satu arah di suatu saat, ia tidak dapat melakukan gabungan luar penuh• Ditambah batasan tambahan berikut dari dokumentasi Oracle:o Operator (+) hanya dapat diterapkan ke kolom, bukan ekspresi arbitrer. Namun, ekspresi arbitrer dapat berisi satu atau lebih kolom yang ditandai dengan operator (+).o Kondisi yang berisi operator (+) tidak dapat digabungkan dengan kondisi lain menggunakan operator logika OR.o Kondisi tidak dapat menggunakan kondisi perbandingan IN untuk membandingkan kolom yang ditandai dengan operator (+) dengan ekspresi.o Kondisi tidak dapat membandingkan kolom yang ditandai dengan operator (+) dengan sub-kueri."

Jadi inilah saatnya untuk merangkul sintaks gabungan ANSI – dan pindah ke abad ke-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. Cara membuat diagram hubungan entitas (ER) menggunakan Oracle SQL Developer

  2. Bagaimana cara mengetahui kapan tabel tertentu dibuat di Oracle?

  3. bagaimana cara memanggil satu proc yang disimpan dari anther dan memodifikasi refcursor yang dikembalikan?

  4. Oracle Menggabungkan beberapa kolom menjadi satu

  5. Apakah Oracle menggunakan evaluasi hubung singkat?