Теперь для добавления в БД данных о сотрудниках создадим две редакцмм триггерных процедур. Это делается аналогично обычным процедурам. Прикладной смысл триггерных процедур в данном случае состоит в нормализации имен сотрудников перед помещением в базу. CONNECT yard/pass ALTER SESSION SET EDITION = ora$base;
CREATE OR REPLACE TRIGGER empl_insert BEFORE INSERT ON emp_view
FOR EACH ROW BEGIN :new.ename := INITCAP ( :new.ename ); END; / GRANT INSERT ON emp_view TO scott;
Обратите внимание, что для редактируемых представлений (EDITIONING VIEW) в триггерных процедурах не действует привязка к событию INSTEAD OF, как для обычных представлений, а вместо этого BEFORE и AFTER, как для основных таблиц. Это одно из проявлений особости редактируемых представлений от обычных.
Вторая редакция: ALTER SESSION SET EDITION = app_release_1;
CREATE OR REPLACE TRIGGER empl_insert BEFORE INSERT ON emp_view
FOR EACH ROW BEGIN :new.ename := LOWER ( :new.ename ); END; / GRANT INSERT ON emp_view TO scott;
Проверку можно выполнить следующей последовательностию команд в SQL*Plus: CONNECT scott/tiger ALTER SESSION SET EDITION = ora$base;
INSERT INTO yard.emp_view VALUES ( 1111, 'OBAMA', 10 ); SELECT * FROM yard.emp_view WHERE empno = 1111; ROLLBACK;
ALTER SESSION SET EDITION = app_release_1;
INSERT INTO yard.emp_view VALUES ( 1111, 'OBAMA' ); SELECT * FROM yard.emp_view WHERE empno = 1111; ROLLBACK;