Підтримка ANSI стандарту SQL в Oracle 9i
Одна з переваг версії Oracle 9i (v.9.0.1) над попередніми полягає в підтримці ANSI стандарту SQL. Зокрема, Oracle 9i “нарешті” підтримує такі конструкції з’єднань, як
ТаблA INNER|LEFT|RIGHT|FULL JOIN ТаблB ON умова_з’єднання
Виявляється, не все так гладко для спеціалістів, які раніше звикли з такими конструкціями, працюючи з MS SQLServer чи MS Access. Oracle 9i дійсно дозволяє виконувати SELECT-запити типу
SELECT …
FROM tab1 LEFT JOIN tab2 ON tab1.fld1=tab2.fld2
WHERE …;
Якщо спробувати створити перегляд за допомогою команд
CREATE OR REPLACE VIEW vtab12 AS
SELECT …
FROM tab1 LEFT JOIN tab2 ON tab1.fld1=tab2.fld2
WHERE …;
то ці перегляди створюються без проблем. Однак вибірка з такого перегляду
SELECT * FROM vtab12;
може спричинити незрозумілу помилку.
На скільки я зрозумів, оптимізатор Oracle для запитів не завжди грамотно справляється JOIN-ами. Для нього чомусь складною є конструкція типу
SELECT * FROM (
SELECT …
FROM tab1 LEFT JOIN tab2 ON tab1.fld1=tab2.fld2
WHERE …
);
яка фактично є тотожна до попередньої вибірки з перегляду.
Тому, рекомендую і надалі використовувати традиційні для Oracle з’єднання за допомогою частини WHERE
CREATE OR REPLACE VIEW vtab12 AS
SELECT …
FROM tab1, tab2
WHERE tab1.fld1=tab2.fld2(+)
…;
незважаючи на те, що документація Oracle настійливо рекомендує використовувати ANSI стандарт.
Джерело http://pzhe.net/ua/oracle_ansisql.
Recent comments
13 years 10 weeks ago
13 years 12 weeks ago
13 years 46 weeks ago
14 years 1 week ago
14 years 39 weeks ago
15 years 10 weeks ago
15 years 16 weeks ago
15 years 21 weeks ago
15 years 23 weeks ago
15 years 38 weeks ago