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

      

  • 相关阅读:
    mysql判断一个字符串是否包含某几个字符
    mysql动态sql 整理多个字段
    mysql 把表中某一列的内容合并为一行
    linux基础
    shell基础
    香港主机Squid+Stunnel代理搭建
    mysql字符串根据指定字符分割
    tomcat项目快速启动设置
    Linux系统内存占用90%以上——解决方法
    redis常用命令
  • 原文地址:https://www.cnblogs.com/fanbi/p/10307435.html
Copyright © 2011-2022 走看看