赞
踩
- CREATE TABLE COMPANY(
- ID INT PRIMARY KEY NOT NULL,
- NAME TEXT NOT NULL,
- AGE INT NOT NULL,
- ADDRESS CHAR(50),
- SALARY REAL
- );
-
- CREATE TABLE AUDIT_HIS(
- EMP_ID INT NOT NULL,
- EMP_NAME TEXT NOT NULL,
- ENTRY_DATE TEXT NOT NULL
- );
-
- CREATE TABLE AUDIT(
- EMP_ID INT NOT NULL,
- EMP_NAME TEXT NOT NULL,
- ENTRY_DATE TEXT NOT NULL
- );
-
- CREATE OR REPLACE VIEW "public"."company_view" AS
- SELECT company.id,company.name,company.age
- FROM company;

- CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $$
- BEGIN
- INSERT INTO AUDIT_HIS(EMP_ID,EMP_NAME,ENTRY_DATE) VALUES (OLD.ID,OLD.NAME,current_timestamp);
- INSERT INTO AUDIT(EMP_ID,EMP_NAME,ENTRY_DATE) VALUES (NEW.ID,NEW.NAME,current_timestamp);
- RETURN NULL;
- END;
- $$ LANGUAGE plpgsql;
注:
a.触发器函数是触发器触发时调用,函数返回的类型必须是TRIGGER ,且不能有任何参数
b.postgresql触发器函数中自带一些特殊变量:
3.1表触发器
- CREATE TRIGGER example_trigger AFTER INSERT OR UPDATE ON COMPANY
- FOR EACH ROW EXECUTE PROCEDURE auditlogfunc();
3.2视图触发器
- CREATE TRIGGER company_view_trigger AFTER UPDATE ON company_view
- EXECUTE PROCEDURE auditlogfunc();
注:视图触发器不支持行级,即 不能添加FOR EACH ROW
DROP TRIGGER example_trigger on COMPANY;
drop function function_name (parameters_list);
SELECT * FROM pg_trigger;
7.测试
- INSERT INTO COMPANY VALUES(1, '小米科技', 8, '北京市朝阳区', 9999);
- UPDATE COMPANY SET NAME ='阿里巴巴' WHERE ID ='1';
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。