zoukankan      html  css  js  c++  java
  • postgresql 添加触发器

    添加触发器

    -- 创建触发器函数
    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();
  • 相关阅读:
    关于fill_parent ,wrap_content ,match_parent区别
    开发第六天
    开发第五天
    关于Android创建虚拟机出现Failed to allocate memory: 8解决办法
    第十一周总结
    开发第四天
    开发第三天
    开发第二天
    开发第一天
    用户场景分析
  • 原文地址:https://www.cnblogs.com/huanglei2010/p/11474809.html
Copyright © 2011-2022 走看看