Підтримка 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 4 weeks ago
13 years 6 weeks ago
13 years 40 weeks ago
13 years 47 weeks ago
14 years 33 weeks ago
15 years 4 weeks ago
15 years 10 weeks ago
15 years 15 weeks ago
15 years 17 weeks ago
15 years 32 weeks ago