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

www.refmanagement.ru          

Создание перекрестных межредакционных триггерных процедур


Одна из создаваемых ниже триггерных процедур отвечает за правку данных, необходимую для работы старой редакции приложений, во время работы нового, а вторая наоборот. Существенно, что транслироваться обе перекрестные процедуры должны быть приписаны новой редакции: ALTER SESSION SET EDITION = app_release_1;

CREATE OR REPLACE TRIGGER cross_forward_job BEFORE INSERT OR UPDATE ON emp_tab FOR EACH ROW FORWARD CROSSEDITION

BEGIN SELECT jobid INTO :new.jobno FROM job WHERE :new.job = jname; END; /

CREATE OR REPLACE TRIGGER cross_reversed_job BEFORE INSERT OR UPDATE ON emp_tab FOR EACH ROW REVERSE CROSSEDITION

BEGIN SELECT jname INTO :new.job FROM job j WHERE :new.jobno = jobid; END; /

Проверку способен организовать следующий код: CONNECT scott/tiger ALTER SESSION SET EDITION = ora$base;

INSERT INTO yard.emp ( empno, ename, job ) VALUES ( 1111, 'OBAMA', 'CLERK' ); COMMIT; ALTER SESSION SET EDITION = app_release_1;

INSERT INTO yard.emp ( empno, ename, jobno ) VALUES ( 2222, 'LADEN', 2 ); COMMIT;

Как и раньше, если транзакция успела изменить какие-нибудь данные в БД, для настройки на новую редакцию ее потребуется сначала закрыть. В результате получим: SQL> SELECT * FROM yard.emp WHERE empno IN ( 1111, 2222 );

EMPNO ENAME JOBNO MGR HIREDATE SAL COMM DEPTNO ---------- ------- ---------- -------- --------- ------- ------- -------- 1111 OBAMA 2

2222 LADEN 2

SQL> ALTER SESSION SET EDITION = ora$base;

Session altered.

SQL> SELECT * FROM yard.emp WHERE empno IN ( 1111, 2222 );

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ------- --------- -------- --------- ------- ------- -------- 1111 OBAMA CLERK

2222 LADEN CLERK

При работе со старой редакцией воспроизводится поведение старой таблицы EMP, а при работе с новой – с тою же таблицей, но в новом варианте.



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