首页 > 数据库技术 > 详细

postgresql 添加触发器

时间:2019-09-06 16:25:01      阅读:162      评论:0      收藏:0      [点我收藏+]

添加触发器

 

-- 创建触发器函数
CREATE FUNCTION update_kpi_for_path_depth_trigger_fun()
returns trigger as $$
begin
    DELETE from kpi_path;
    WITH RECURSIVE T (kpi_id, NAME, PARENT_ID, PATH, DEPTH,kpi_sql)  AS (
    SELECT kpi_id, NAME, PARENT_ID, ARRAY[kpi_id] AS PATH, 1 AS DEPTH,kpi_sql
    FROM kpi
    WHERE PARENT_ID = 0 
    UNION ALL
    SELECT  D.kpi_id, D.NAME, D.PARENT_ID, T.PATH || D.kpi_id, T.DEPTH + 1 AS DEPTH,D.kpi_sql
    FROM kpi D
    JOIN T ON D.PARENT_ID = T.kpi_id
    )
    INSERT INTO kpi_path(kpi_id,name,parent_id,path,depth,kpi_sql)  SELECT kpi_id, NAME, PARENT_ID, PATH, DEPTH,kpi_sql FROM T
    ORDER BY PATH;
    UPDATE kpi set path =p.path,depth=p.depth from kpi_path p WHERE p.kpi_id=kpi.kpi_id;
        RETURN NULL;   -- 返回值是必须的
end;
$$
language plpgsql;
 -- 基于表和列创建出发器
CREATE TRIGGER update_kpi_for_path_depth_fun_trigger
after insert or UPDATE of parent_id on kpi
for each row execute procedure update_kpi_for_path_depth_trigger_fun();

 

postgresql 添加触发器

原文:https://www.cnblogs.com/huanglei2010/p/11474809.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!