人大金仓 PostgreSQL 触发器同步记录数据到另一张表

创建触发器

sql 复制代码
CREATE TRIGGER sync_tz_ly_event_trigger AFTER INSERT 
OR UPDATE 
	OR DELETE ON tz_ly_event FOR EACH ROW
	EXECUTE FUNCTION sync_tz_ly_event_records ( );

创建触发函数

sql 复制代码
CREATE OR REPLACE FUNCTION "sync_tz_ly_event_records"()
  RETURNS "pg_catalog"."trigger" AS $BODY$ BEGIN
	IF
		TG_OP = 'INSERT' THEN
			INSERT INTO training_course_new ( record_id,class_name )
		VALUES
			( NEW.id,NEW.title );
		ELSIF TG_OP = 'UPDATE' THEN
			UPDATE training_course_new 
			SET class_name = NEW.title 
			WHERE
				record_id = CAST(OLD.id AS TEXT);
		ELSIF TG_OP = 'DELETE' THEN
				DELETE 
				FROM
					training_course_new 
				WHERE
					record_id = CAST(OLD.id AS TEXT);
			END IF;
			RETURN NULL;
		END;
	$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
sql 复制代码
CREATE OR REPLACE FUNCTION "sync_tz_ly_event_records"()
  RETURNS "pg_catalog"."trigger" AS $BODY$ BEGIN
	IF
		TG_OP = 'INSERT' THEN-- 		同心迁移活动表
			INSERT INTO training_course_new (
				record_id,
				class_name,
				dept_name,
				evt_time,
				address,
				evt_scale,
				train_man_num,
				CONTENT,
				poster_code,
				reg_bgn_date,
				reg_end_date,
				area_code,
				DOMAIN,
				publish_status,
				audit_by,
				audit_date,
				audit_comment,
-- 	因数据缺少,使用报名时间作为活动时间
				start_time,
				end_time,
				is_apply,
				ly_user_id,
				create_user,
				create_time,
				modify_user,
				modify_time,
				sort,
-- 	活动类型
				TYPE,
--  截止时间
				expire_time,
-- 	报道时间为活动开始时间
				report_time 
			)
		VALUES
			(
				NEW.ID,
				NEW.title,
				NEW.host_unit,
				NEW.evt_time,
				NEW.evt_address,
				NEW.evt_scale,
				NEW.reg_max_num,
				NEW.description,
				NEW.poster_url,
				NEW.reg_bgn_date,
				NEW.reg_end_date,
				NEW.area_code,
				NEW.DOMAIN,
				NEW.STATE,
				NEW.audit_by,
				NEW.audit_date,
				NEW.audit_comment,
-- 	因数据缺少,使用报名时间作为活动时间
-- bgn_date,
-- end_date,
				NEW.reg_bgn_date,
				NEW.reg_end_date,
				NEW.is_apply,
				NEW.ly_user_id,
				NEW.created_by,
				NEW.created_date,
				NEW.last_modified_by,
				NEW.last_modified_date,
				NEW.sort,
-- 	活动类型
				2,
-- 截止时间
				NEW.reg_end_date,
-- 	因数据缺少,报道时间,用报名结束时间
				NEW.reg_end_date 
			);
-- 			更新create_org_id,create_org_name字段 ,创建人可见改为部门可见
		UPDATE training_course_new tcn 
		SET tcn.create_org_id = dept.dept_id,
		tcn.create_org_name = dept.dept_name 
		FROM
			training_course_new course
			LEFT JOIN sys_users users ON users."id" = course.create_user
			LEFT JOIN sys_dept dept ON dept.dept_id = users.org_id 
		WHERE
			tcn.record_id = course.record_id 
			AND tcn.record_id = CAST ( NEW.ID AS TEXT );
-- 活动新闻拆分
		INSERT INTO training_course_new_news ( training_course_id, is_news, news_content, news_state, news_date, news_author )
		VALUES
			(
				NEW.ID,
				NEW.is_news,
				NEW.news_content,
			CASE
					
					WHEN NEW.news_state = 0 THEN
					2 
					WHEN NEW.news_state = 1 THEN
					4 ELSE NULL 
				END,
				NEW.news_date,
				NEW.news_author 
			);
		ELSIF TG_OP = 'UPDATE' THEN
			UPDATE training_course_new 
			SET class_name = NEW.title,
			dept_name = NEW.host_unit,
			evt_time = NEW.evt_time,
			address = NEW.evt_address,
			evt_scale = NEW.evt_scale,
			train_man_num = NEW.reg_max_num,
			CONTENT = NEW.description,
			poster_code = NEW.poster_url,
			reg_bgn_date = NEW.reg_bgn_date,
			reg_end_date = NEW.reg_end_date,
			area_code = NEW.area_code,
			DOMAIN = NEW.DOMAIN,
			publish_status = NEW.STATE,
			audit_by = NEW.audit_by,
			audit_date = NEW.audit_date,
			audit_comment = NEW.audit_comment,
			start_time = NEW.reg_bgn_date,
			end_time = NEW.reg_end_date,
			is_apply = NEW.is_apply,
			ly_user_id = NEW.ly_user_id,
			create_user = NEW.created_by,
			create_time = NEW.created_date,
			modify_user = NEW.last_modified_by,
			modify_time = NEW.last_modified_date,
			sort = NEW.sort,
			TYPE = 2,
			expire_time = NEW.reg_end_date,
			report_time = NEW.reg_end_date 
			WHERE
				record_id = CAST ( OLD.ID AS TEXT );
-- 			新闻表更新
			UPDATE training_course_new_news 
			SET is_news = NEW.is_news,
			news_content = NEW.news_content,
			news_state =
			CASE
					
					WHEN NEW.news_state = 0 THEN
					2 
					WHEN NEW.news_state = 1 THEN
					4 ELSE NULL 
				END,
				news_date = NEW.news_date,
				news_author = NEW.news_author 
			WHERE
				training_course_id = CAST ( OLD.ID AS TEXT );
			ELSIF TG_OP = 'DELETE' THEN
				DELETE 
				FROM
					training_course_new 
				WHERE
					record_id = CAST ( OLD.ID AS TEXT );
				
			END IF;
			RETURN NULL;
			
		END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
相关推荐
java小郭2 分钟前
如何在服务器中找到数据库文件路径
运维·服务器·数据库
Nicolas89323 分钟前
高效的向量搜索算法——分层可导航小世界图(HNSW)
数据库·深度学习·算法·机器学习·搜索引擎·语言模型·图搜索
小菜翔1 小时前
Java中的四种访问权限控制符分别是什么?
前端·数据库·servlet
chenyang_882 小时前
MySQL——聚合函数及分组过滤
数据库·mysql
断一生平凡3 小时前
python接口自动化的脚本
数据库·python·自动化
姐姐,我还可以3 小时前
搭建 MySQL MHA
android·数据库·mysql·adb
caron43 小时前
SQLite3 使用文档
数据库·sqlite
Gauss松鼠会3 小时前
GaussDB关键技术原理:高性能(二)
数据库·sql·oracle·架构·database·gaussdb
小绵羊不怕大灰狼3 小时前
MongoDB数据库 MQL (MongoDB Query Language)语句大全
数据库·mongodb
wkysdhr3 小时前
MySQL索引、事物
数据库·mysql