56,675
社区成员
发帖
与我相关
我的任务
分享
#基础表
create table demo
(
col_one varchar(50),
col_two varchar(50)
)
#触发器记录
create table trigger_demo
(
old_col varchar(50),
new_col varchar(50)
)
# 修改
Delimiter $$
Drop Trigger If Exists trigger_insert; $$
Create Trigger trigger_insert
before update on demo for each row
begin
-- 需要定义接收游标数据的变量
declare colVal CHAR(16);
-- 遍历数据结束标志
declare done int default false;
-- 游标
declare cur cursor for select column_name from information_schema.columns
where table_schema='smartevent' and table_name='demo';
-- 将结束标志绑定到游标
declare continue handler for not found set done=true;
-- 打开游标
open cur;
-- 开始循环
read_loop: loop
-- 提取游标里的数据,这里只有一个,多个的话也一样;
fetch cur into colVal;
-- 声明结束的时候
if done then
leave read_loop;
end if;
-- 这里做你想做的循环的事件
--这里如何实现动态加载修改前,修改后值不一致的列名,插入到TRIGGER_DEMO表
/*set @ss1=concat('new','.',colVal);
set @ss2=concat('old','.',colVal);
set @ss='insert into TRIGGER_DEMO(NEW_COL,OLD_COL)
values('+@ss1+','+@ss2+');';
PREPARE s1 FROM @ss;
execute s1;*/
end loop;
-- 关闭游标
close cur;
end; $$