Заведение разных редакций одной и той же процедуры в схеме со свойством EDITIONS_ENABLED = TRUE выглядит достаточно прозрачно. Так, для добавления данных о сотрудниках можно завести две редакции процедуры INSERT_EMPLOYEE следующим образом: CONNECT yard/pass ALTER SESSION SET EDITION = ora$base;
CREATE OR REPLACE PROCEDURE insert_employee ( eno NUMBER , ename VARCHAR2 , dno NUMBER ) AS BEGIN INSERT INTO yard.emp_view ( empno, ename, deptno ) VALUES ( eno, ename, dno ) ; END; / GRANT EXECUTE ON insert_employee TO scott;
ALTER SESSION SET EDITION = app_release_1;
CREATE OR REPLACE PROCEDURE insert_employee ( eno NUMBER , ename VARCHAR2 ) AS BEGIN INSERT INTO yard.emp_view ( empno, ename ) VALUES ( eno, ename ) ; END; / GRANT EXECUTE ON insert_employee TO scott;
Проверка: SQL> CONNECT scott/tiger Connected. SQL> ALTER SESSION SET EDITION = ora$base;
Session altered.
SQL> EXECUTE yard.insert_employee ( 1111, 'OBAMA', 10 )
PL/SQL procedure successfully completed.
SQL> ROLLBACK;
Rollback complete.
SQL> ALTER SESSION SET EDITION = app_release_1;
Session altered.
SQL> EXECUTE yard.insert_employee ( 1111, 'OBAMA' )
PL/SQL procedure successfully completed.
SQL> ROLLBACK;
Rollback complete.
Откат транзакций сделан (а) чтобы сохранить прежние данные, и (б) в первом случае – чтобы закрыть транзакцию перед переключением на новую редакцию.