更新日期:2024年09月11日
在创建一个或多个表之后(如下例中名为 dept 和 emp 的表),然后又创建了基
于 dept 和 emp 的视图(如名为 manager_info 的视图)之后,使用 INSTEAD OF 触发器更
新该视图。
以下 CREATE TRIGGER 语句创建 manager_info_update,
这是一个 INSTEAD OF 触发器,
用来通过 manager_info 视图更新 dept 和 emp 表中的行。
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;
在创建了表、视图、触发器和 SPL 例程以后,数据库服务器将下面的 UPDATE 语句视作
触发事件:
UPDATE manager_info
SET empno = 3666, empname = "Steve"
WHERE deptno = 01;
GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 349 -
此触发 UPDATE 语句不会得到执行,但是此事件将造成执行触发器操作,即调
用 updtab() SPL 例程。SPL 例程中的 UPDATE 语句将值更新到manager_info 视图
的 emp 和 dept 基本表中。