zoukankan      html  css  js  c++  java
  • postgresql 触发器 更新操作

    1 前言

    功能需求:当一张表格某个字段变化,另一张表某个字段写入该值

    2 代码

      CREATE OR REPLACE FUNCTION "public"."synStatus"()
      RETURNS "pg_catalog"."trigger" AS $BODY$
     
     declare vl_status  int;
     
     BEGIN
    
    SELECT status INTO vl_status  FROM ordergoods WHERE order_id = NEW.order_id; 
    	-- Routine body goes here...
    	IF( TG_OP='UPDATE' ) THEN
    		UPDATE order SET status = vl_status  WHERE NEW.order_id = order_id;
    	END IF;
    	RETURN NEW;
    END
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 10
    
    
    //触发器
    CREATE TRIGGER "triggerSynOrder" AFTER UPDATE OF "status", "timeline" ON "public"."ordergoods"
    FOR EACH ROW
    EXECUTE PROCEDURE "public"."synStatus"();
    

    功能2:子订单中状态最小的更新到订单上,并更新时间线字段

      CREATE OR REPLACE FUNCTION "public"."synStatus2"()
      RETURNS "pg_catalog"."trigger" AS $BODY$
     
     declare status_min int;
     
     BEGIN
    
    SELECT MIN(status) INTO status_min FROM ordergoods WHERE order_id = NEW.order_id; 
    	-- Routine body goes here...
    	IF( TG_OP='UPDATE' ) THEN
    		UPDATE order SET status = status_min,timeline = concat_ws(',', timeline,cur_timeline_status)),cur_timeline_status = NEW.cur_timeline_status WHERE NEW.order_id = order_id;
    	END IF;
    	RETURN NEW;
    END
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 10
    
    //触发器
    CREATE TRIGGER "triggerSynOrder" AFTER UPDATE OF "status", "timeline" ON "public"."ordergoods"
    FOR EACH ROW
    EXECUTE PROCEDURE "public"."synStatus2"();
    

    3 小结

    注:方法中NEW和OLD指的是触发器监听的某表某行的新数据和未更新前的数据  

      

  • 相关阅读:
    作业九 主成分分析
    作业八 特征选择
    作业七 逻辑回归应用
    作业六 逻辑回归
    作业五 线性回归算法
    第十四次作业:手写数字识别-小数据集
    第十三次作业:深度学习-卷积
    第七次作业:7.逻辑回归实践
    第十二次作业:垃圾邮件分类2
    第十一次作业:朴素贝叶斯-垃圾邮件分类
  • 原文地址:https://www.cnblogs.com/fanbi/p/10307435.html
Copyright © 2011-2022 走看看