Відповідь до коментаря

Підтримка 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 стандарт.

Reply

Ця інформація зберігається приватно і не буде оприлюднена.
  • Адреси Веб-сторінок і адреси е-пошти автоматично перетворюються у посилання.
  • Допустимі HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Лінійки і параграфи розриваються автоматично.

Більше інформації про можливості форматування

CAPTCHA
Це питання дозволяє переконатися нам що Ви є реальним відвідувачем сайту і захищає сайт від спаму.
  _         _      _     _   _   _       ____ 
| | __ / \ | |_ | | | | | | __ / ___|
| |/ / / _ \ | __| | |_| | | |/ / | | _
| < / ___ \ | |_ | _ | | < | |_| |
|_|\_\ /_/ \_\ \__| |_| |_| |_|\_\ \____|
Уведіть код із схематично зображених символів.