postgresql触发器使用实例
2014-06-20 15:34
337 查看
创建测试表:
CREATE TABLE emp (
empname text NOT NULL,
salary integer
);
CREATE TABLE emp_audit(
operation text NOT NULL,
stamp timestamp NOT NULL,
userid text NOT NULL,
empname text NOT NULL,
salary integer
);
创建存储过程:
CREATE OR REPLACE FUNCTION process_emp_audit()
RETURNS TRIGGER AS
$emp_audit$
BEGIN
IF (TG_OP = 'DELETE') THEN
INSERT INTO emp_audit SELECT 'DELETE', now(), user, OLD.*;
ELSIF (TG_OP = 'UPDATE') THEN
-- save old and new values
INSERT INTO emp_audit SELECT 'OLD', now(), user, OLD.*;
INSERT INTO emp_audit SELECT 'NEW', now(), user, NEW.*;
ELSIF (TG_OP = 'INSERT') THEN
INSERT INTO emp_audit SELECT 'INSERT', now(), user, NEW.*;
ELSEIF (TG_OP = 'TRUNCATE') THEN
INSERT INTO emp_audit SELECT 'TRUNCATE', now(), user, '-', -1;
END IF;
RETURN NULL; -- result is ignored bacause this is an AFTER trigger
END;
$emp_audit$ LANGUAGE plpgsql;
创建针对insert和update每行的触发器:
CREATE TRIGGER emp_audit
AFTER INSERT OR UPDATE OR DELETE ON emp
FOR EACH ROW EXECUTE PROCEDURE process_emp_audit();
创建针对update的语句级的触发器:
CREATE TRIGGER emp_audit_truncate
AFTER TRUNCATE ON emp
FOR EACH STATEMENT EXECUTE PROCEDURE process_emp_audit();
CREATE TABLE emp (
empname text NOT NULL,
salary integer
);
CREATE TABLE emp_audit(
operation text NOT NULL,
stamp timestamp NOT NULL,
userid text NOT NULL,
empname text NOT NULL,
salary integer
);
创建存储过程:
CREATE OR REPLACE FUNCTION process_emp_audit()
RETURNS TRIGGER AS
$emp_audit$
BEGIN
IF (TG_OP = 'DELETE') THEN
INSERT INTO emp_audit SELECT 'DELETE', now(), user, OLD.*;
ELSIF (TG_OP = 'UPDATE') THEN
-- save old and new values
INSERT INTO emp_audit SELECT 'OLD', now(), user, OLD.*;
INSERT INTO emp_audit SELECT 'NEW', now(), user, NEW.*;
ELSIF (TG_OP = 'INSERT') THEN
INSERT INTO emp_audit SELECT 'INSERT', now(), user, NEW.*;
ELSEIF (TG_OP = 'TRUNCATE') THEN
INSERT INTO emp_audit SELECT 'TRUNCATE', now(), user, '-', -1;
END IF;
RETURN NULL; -- result is ignored bacause this is an AFTER trigger
END;
$emp_audit$ LANGUAGE plpgsql;
创建针对insert和update每行的触发器:
CREATE TRIGGER emp_audit
AFTER INSERT OR UPDATE OR DELETE ON emp
FOR EACH ROW EXECUTE PROCEDURE process_emp_audit();
创建针对update的语句级的触发器:
CREATE TRIGGER emp_audit_truncate
AFTER TRUNCATE ON emp
FOR EACH STATEMENT EXECUTE PROCEDURE process_emp_audit();
相关文章推荐
- SQL Server 2000 触发器的使用实例
- SQL Server 触发器的使用实例(2)
- 过滤关键字,在表TABLE_A 插入前,建立触发器,使用游标过滤关键字。postgresql
- Oracle使用触发器实例
- 利用navicat创建存储过程、触发器和使用游标的简单实例
- SQL Server 2000 触发器的使用实例
- mysql触发器(Trigger)简明总结和使用实例
- Quartz入门实例3-使用CronTrigger指定触发器执行job
- 利用navicat创建存储过程、触发器和使用游标的简单实例
- Intellij idea使用postgresql 反向生成实例, 'Basic' attribute type should not be 'Object'
- SQL Server 2000 触发器的使用实例
- 利用navicat创建存储过程、触发器和使用游标的简单实例
- postgresql 触发器的使用
- Oracle各类触发器的使用实例
- SQLServer 触发器使用实例
- SQL Server 2000 触发器的使用实例
- postgresql 使用整理:分表与触发器
- mysql 触发器使用实例(修改一个表内容的同时另一个表内容自动变化)
- 利用navicat创建存储过程、触发器和使用游标的简单实例
- mysql触发器(Trigger)简明总结和使用实例