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

jack15850798154 2015-10-12 03:57:58
需求如下:
需要记录一张表中修改了那些字段记录修改前的值和修改后的值!


#基础表
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; $$
...全文
192 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jack15850798154 2015-10-12
  • 打赏
  • 举报
回复
引用 2 楼 ACMAIN_CHM 的回复:
触发器中不支持 prepare

的确是不支持,有什么办法能够实现这种效果吗?
ACMAIN_CHM 2015-10-12
  • 打赏
  • 举报
回复
触发器中不支持 prepare
jack15850798154 2015-10-12
  • 打赏
  • 举报
回复
在MariaDB 中触发器下是不支持执行动态SQL的!

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧