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