DML 触发器动作
本节主要介绍 DML 触发器的触发动作。
使用存储过程作为触发动作
要使用存储过程作为触发函数,需要首先定义函数,再创建触发器。以下是一个触发器示例。
CREATE TABLE vb_trigger_src_tbl(id1 INT, id2 INT, id3 INT);
CREATE TABLE vb_trigger_des_tbl(id1 INT, id2 INT, id3 INT);
1、创建 INSERT 触发函数:
CREATE OR REPLACE FUNCTION tri_insert_func() RETURNS TRIGGER AS
$$
DECLARE
BEGIN
INSERT INTO vb_trigger_des_tbl VALUES(NEW.id1, NEW.id2, NEW.id3);
RETURN NEW;
END
$$ LANGUAGE PLPGSQL;
2、创建 UPDATE 触发函数:
CREATE OR REPLACE FUNCTION tri_update_func() RETURNS TRIGGER AS
$$
DECLARE
BEGIN
UPDATE vb_trigger_des_tbl SET id3 = NEW.id3 WHERE id1=OLD.id1;
RETURN OLD;
END
$$ LANGUAGE PLPGSQL;
3、创建 DELETE 触发函数:
CREATE OR REPLACE FUNCTION TRI_DELETE_FUNC() RETURNS TRIGGER AS
$$
DECLARE
BEGIN
DELETE FROM vb_trigger_des_tbl WHERE id1=OLD.id1;
RETURN OLD;
END
$$ LANGUAGE PLPGSQL;
4、分别创建触发器,对应 INSERT、UPDATE 与 DELETE 操作。
CREATE TRIGGER insert_trigger
BEFORE INSERT ON vb_trigger_src_tbl
FOR EACH ROW
EXECUTE PROCEDURE tri_insert_func();
CREATE TRIGGER update_trigger
AFTER UPDATE ON vb_trigger_src_tbl
FOR EACH ROW
EXECUTE PROCEDURE tri_update_func();
CREATE TRIGGER delete_trigger
BEFORE DELETE ON vb_trigger_src_tbl
FOR EACH ROW
EXECUTE PROCEDURE tri_delete_func();
PL/pgSQL类型触发器函数特殊变量
触发器函数与普通函数的区别主要在于,触发器函数不能有参数,并且返回类型为 trigger。在 Vastbase 数据库中,系统创建了以下特殊变量用于函数内部调用。
表 2 PL/pgSQL类型触发器函数特殊变量
取值范围:BEFORE、AFTER、INSTEAD OF。 |
|
取值范围:ROW、STATEMENT。 |
|
取值范围:INSERT、UPDATE、DELETE、TRUNCATE。 |
|