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

         

Пример создания и использования разных редакций представления данных (view)


К настоящему моменту в БД имеется две редакции. Будем формировать их содержание редакциями объектов в схеме YARD. Создадим в ней две несложные редакции одного и того же представления данных – с выдачей сведений об отделе сотрудника, и без: CONNECT yard/pass ALTER SESSION SET EDITION = ora$base;

CREATE OR REPLACE EDITIONING VIEW emp_view

AS SELECT empno, ename, deptno FROM emp ; ALTER SESSION SET EDITION = app_release_1;

CREATE OR REPLACE EDITIONING VIEW emp_view

AS SELECT empno, ename FROM emp ;

Настройку на редакцию ORA$BASE можно было выше не выполнять, потому что эта редакция умолчательная (это проверялось ранее), и автоматически действует в начале каждого сеанса.

В результате появились две редакции представления данных EMP_VIEW: SQL> SELECT view_name, edition_name FROM user_editioning_views_ae;

VIEW_NAME EDITION_NAME ------------------------------ ------------------------------ EMP_VIEW ORA$BASE EMP_VIEW APP_RELEASE_1

Редактируемые представления данных (editioning views) отличаются от обычных не только формальным словом EDITIONING при создании, но и некоторыми техническими свойствами. Они могут строиться на основе единственной таблицы, без фильтрации строк фразой WHERE и с отсутствием преобразований столбцов (в то же время воспроизведение всех столбцов не обязательно). Есть и другие отличия, не востребованными в этом тексте.

Чтобы пользователь SCOTT имел доступ к данным, для каждой редакции требуется выдать отдельное разрешение: ALTER SESSION SET EDITION = ora$base;

GRANT SELECT ON emp_view TO scott; ALTER SESSION SET EDITION = app_release_1;

GRANT SELECT ON emp_view TO scott;

Вот как этими разрешениями может воспользоваться SCOTT: SQL> CONNECT scott/tiger Connected. SQL> ALTER SESSION SET EDITION = ora$base;

Session altered.

SQL> SELECT * FROM yard.emp_view WHERE ROWNUM = 1;

EMPNO ENAME DEPTNO ---------- ---------- ---------- 7369 SMITH 20

SQL> ALTER SESSION SET EDITION = app_release_1;

Session altered.

SQL> SELECT * FROM yard.emp_view WHERE ROWNUM = 1;

EMPNO ENAME ---------- ---------- 7369 SMITH

Теперь без отмены прежнего представления данных (которым может пользоваться текущее приложение) открылась возможность отлаживать приложение применительно к новому.

Упражнение. Отобрать у пользователя SCOTT привилегию на выборку данных из YARD.EMP_VIEW в редакции APP_RELEASE_1 и наблюдать результат попытки обращения.



Содержание раздела