• 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指的是触发器监听的某表某行的新数据和未更新前的数据  

      

  • 相关阅读:
    GP服务之IDW GIS空间插值密度分布图
    Cesium添加标注
    arcgis时间滑块time slider工具
    ArcObjects和ArcEngine的区别
    Android 多媒体 1.1 获取多媒体信息[原创]
    Android 获取root权限 实现重启
    Android GIF 编解码
    中国的程序员只能支撑到30岁么。
    Android通过摇晃手机的频率来控制声音的频率
    Android ListView 下拉刷新 上拉更多[实例]
  • 原文地址:https://www.cnblogs.com/fanbi/p/10307435.html
Copyright © 2020-2023  润新知