Предполагается, что имеются структуры и объекты, построенные в статье «», а именно:
Чтобы все это построить в своей БД, достаточно шаг за шагом повторить действия из предыдущей статьи.
Для удобства работы в SQL*Plus подготовим несколько файлов. Файл phonepolicyoptions.sql:
CONNECT lbacsys/lbacsys
BEGIN SA_POLICY_ADMIN.REMOVE_TABLE_POLICY ( POLICY_NAME => 'empsec_policy' , SCHEMA_NAME => 'scott' , TABLE_NAME => 'phone' , DROP_COLUMN => TRUE
); END; /
BEGIN SA_POLICY_ADMIN.APPLY_TABLE_POLICY ( POLICY_NAME => 'empsec_policy' , SCHEMA_NAME => 'scott' , TABLE_NAME => 'phone' , TABLE_OPTIONS => '&1' ); END; /
UPDATE scott.phone SET empsec_label = CASE WHEN empno IN ( SELECT empno FROM scott.emp WHERE job IN ( 'MANAGER', 'PRESIDENT' ) ) THEN CHAR_TO_LABEL ( 'EMPSEC_POLICY', 'LIMITED' ) ELSE CHAR_TO_LABEL ( 'EMPSEC_POLICY', 'OPEN' ) END ;
В этом сценарии сначала из политики EMPSEC_POLICY исключается таблица SCOTT.PHONE, причем благодаря явно указанному значению параметра DROP_COLUMN => TRUE служебный (в рамках этой политики) столбец EMPSEC_LABEL также удалится. Затем политика применяется к таблице заново, а ее (новые, те, что нам требуется) свойства будем указывать через параметр для SQL*Plus. Поскольку служебный столбец в таблице PHONE воссоздается заново, его придется и заново заполнять, причем (обратите внимание !) ради удобства всегда однаково.
Другой файл, phones.sql, послужит для наблюдения результата:
SELECT ename, pno FROM scott.emp LEFT OUTER JOIN scott.phone USING (empno) /
Он взят из предыдущей статьи, но в силу своей краткости и ради ясности повторяется здесь.
Создадим также файл updateallen.sql:
UPDATE scott.phone SET empsec_label = CHAR_TO_LABEL ( 'empsec_policy', '&1' ) WHERE empno = ( SELECT empno FROM scott.emp WHERE ename = 'ALLEN' ) /
Несколько прочих сценарных файлов будет создано по ходу дела.
Выдадим в SQL*Plus:
SQL> SET VERIFY OFF
Можно ставить опыты.