Базы данных Oracle - статьи



             

Использование хранимых шаблонов - часть 3


Для дальнейшей работы нам потребуются следующие системные привилегии:

  • create any outline
  • alter any outline
  • drop any outline
  •  Выполним следующее:

    SQL> alter session set create_stored_outlines = healthy_plans;

    Сеанс изменен.

    В этом выражении HEALTHY_PLANS  - это имя категории, с которой будут связаны наши шаблоны.

    Далее, выполним поочередно, два запроса. Первый - "проблемный", тот который мы собираемся оптимизировать(с подсказкой /*+ RULE*/). Второй, тот который мы прооптимизировали, "отключив" подсказку. Однако перед выполнением запросов нам необходимо отключить отображение планов выполнения запросов. Это нужно, чтобы Oracle перехватил, только наши два запроса (иначе будут перехвачены обращения к таблице PLAN_TABLE, содержащей планы выполнения):

    SQL> set autotrace off

    SQL> select /*+ rule*/ *

      2  from t1

      3  where itemid = :itemid;

    строки не выбраны

    SQL>

    SQL> select /* rule*/ *

      2  from t1

      3  where itemid = :itemid;

    строки не выбраны

    На данном этапе важно отметить, что в отличие от Oracle8i, где сравнение SQL запросов с их аналогами в хранимых шаблонах происходит посимвольно, в Oracle9i оно не имеет столь жесткого критерия. Поэтому, скажем запрос:

    select /*+ rule*/ *

    from t1

    where itemid = :itemid;

    с точки зрения использования хранимых шаблонов в Oracle 9i, аналогичен запросу:

    select /*+ RULE*/ * from t1 where ItemID = :itemid;

    тогда, как в Oracle8i это было бы неверно.

    Итак, продолжим.

    Отключим автоматическое создание хранимых шаблонов:

    SQL> alter session set create_stored_outlines = false;

    Сеанс изменен.

    Смотрим, что получилось(для удобочитаемости, установим размер буфера отображения LONG полей равным 15):

    SQL> set long 15

    SQL> select ol_name, sql_text from outln.ol$

      2  where category = 'HEALTHY_PLANS';

    OL_NAME                        SQL_TEXT




    Содержание  Назад  Вперед