MariaDB,中如何在触发器下动态执行拼接语

jack15850798154 jack15850798154 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
需求如下:
需要记录一张表中修改了那些字段记录修改前的值和修改后的值!


#基础表
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; $$
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
jack15850798154
MySQL 57,062 成员 56,759 内容