Има редица бележки от сайта за поддръжка на Oracle относно проблеми със синтаксиса на ANSI присъединяване с заобиколни решения, препоръчващи използването на синтаксиса на Oracle.
Бъг 5188321 грешни резултати (няма редове) ИЛИ ORA-1445 от 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.
Бъг 5368296 ANSI присъединяване към SQL може да не докладва ORA-918 за двусмислена колона
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;
Бъг 7670135 Дълго време за синтактичен анализ при компилиране на 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
От Oracle Press – Oracle OCP 11g всичко в едно ръководство за изпит
И от asktom (който не е ангажиран)
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.
Вижте също по-ранен въпрос по същата тема. Разлика между нотацията плюс (+) на Oracle и анси JOIN нотация?
Намерих също това изявление в документ, но без препратка за това откъде идва
„Започвайки с Oracle 9i, Oracle препоръчва SQL разработчиците да използват синтаксиса за присъединяване ANSI вместо собствения (+) синтаксис на Oracle. Има няколко причини за тази препоръка, включително:
• По-лесно за разделяне и четене (без смесване на присъединяване и ограничаване на кода)• По-лесно за правилно изграждане на код за присъединяване (особено в случай на „външни” обединения)• Преносим синтаксис ще работи във всички други съвместими с ANSI бази данни, като MS SQL Server , DB2, MySQL, PostgreSQL и др.• Тъй като това е универсално приет стандарт, той е общата цел за всички бъдещи инструменти на база данни и доставчици на трети страни• Собственият синтаксис на Oracle за външно присъединяване (+) може да се използва само в една посока на един път, той не може да извърши пълно външно присъединяване • Плюс тези допълнителни ограничения от документацията на Oracle:o Операторът (+) може да се приложи само към колона, а не към произволен израз. Въпреки това, произволен израз може да съдържа една или повече колони, маркирани с оператора (+).o Условие, съдържащо оператора (+), не може да се комбинира с друго условие с помощта на логическия оператор ИЛИ.o Условие не може да използва условието за сравнение IN за сравни колона, маркирана с оператор (+) с израз.o Условие не може да сравни колона, маркирана с оператор (+) с подзаявка."
Така че е време да приемете синтаксиса на присъединяване на ANSI – и да преминете към 21-ви век