Підтримка 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 …;

то ці перегляди створюються без проблем. Однак вибірка з такого перегляду
SELEECT * 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.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <h1> <h2> <h3> <h4> <h5> <h6> <address> <em> <strong> <code> <del> <cite> <acronym> <blockquote> <q> <sub> <p> <br> <pre> <ul> <ol> <li> <dl> <dt> <dd> <a> <b> <u> <i> <table> <tr> <td> <th> <div> <sup><hr> <img>
  • Glossary terms will be automatically marked with links to their descriptions.
  • Lines and paragraphs break automatically.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
  .d8888b.   888       888                 8888888888  888    d8P             888       888    888 
d88P Y88b 888 o 888 888 888 d8P 888 888 888
888 888 d8b 888 888 888 d8P 888 888 888
888d888b. 888 d888b 888 888 888 888 8888888 888d88K 88888888 888 888 8888888888
888P "Y88b 888d88888b888 888 888 888 888 8888888b d88P 888 .88P 888 888
888 888 88888P Y88888 888 888 888 888 888 Y88b d88P 888888K 888 888
Y88b d88P 8888P Y8888 Y88b 888 d88P 888 888 Y88b d88P 888 "88b 888 888
"Y8888P" 888P Y888 "Y8888888P" 888 888 Y88b 88888888 888 888 888 888


Enter the code depicted in ASCII art style.

© Інформаційні технології. Аналітика , Рідна Мережа