创建和使用触发器 / 视图上的 INSTEAD OF 触发器 |
在创建一个或多个表之后(如下例中名为 dept 和 emp 的表),然后又创建了基于 dept 和 emp 的视图(如名为 manager_info 的视图)之后,使用 INSTEAD OF 触发器更新该视图。
CREATE TRIGGER manager_info_update INSTEAD OF UPDATE ON manager_info REFERENCING NEW AS n FOR EACH ROW (EXECUTE PROCEDURE updtab (n.empno, n.empname, n.deptno,)); CREATE PROCEDURE updtab (eno INT, ename CHAR(20), dno INT,) DEFINE deptcode INT; UPDATE dept SET manager_num = eno where deptno = dno; SELECT deptno INTO deptcode FROM emp WHERE empno = eno; IF dno !=deptcode THEN UPDATE emp SET deptno = dno WHERE empno = eno; END IF; END PROCEDURE;
UPDATE manager_info SET empno = 3666, empname = "Steve" WHERE deptno = 01;
此触发 UPDATE 语句不会得到执行,但是此事件将造成执行触发器操作,即调用 updtab() SPL 例程。SPL 例程中的 UPDATE 语句将值更新到 manager_info 视图的 emp 和 dept 基本表中。