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指的是觸發器監聽的某表某行的新數據和未更新前的數據  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM