mysql 存储过程动态执行语句 - 实现动态建表和删表

通过存储过程拼装sql语句,然后执行拼装好的sql语句

主要思路

  • 根据条件从主表获取数据并创建 新的子表

  • 对子表执行 比对,比对结果插入到结果表

  • 删除子表

如果子表的数据仍然比较大,可通过 拼装sql语句给子表建索引,提高比对效率

1、创建子表

set V_EXEC_SQL = concat("create  table ", table_sub, "
select row1,row2,row3 row4 from table_main 
where row1 = '", v_tmp,"';");

 SET @V_EXEC_SQL = V_EXEC_SQL;
 PREPARE STMT FROM @V_EXEC_SQL;     
 EXECUTE STMT ;                     
 DEALLOCATE PREPARE STMT;

 -- 建索引
set V_EXEC_SQL = concat ("ALTER TABLE ", table_main ," ADD INDEX ",table_main ,"_idx1 (row1);");
 SET @V_EXEC_SQL = V_EXEC_SQL;
 PREPARE STMT FROM @V_EXEC_SQL;     
 EXECUTE STMT ;                     
 DEALLOCATE PREPARE STMT;

2、执行业务比对操作

3、业务操作完成后删除掉新建的子表

set V_EXEC_SQL = concat("drop table IF EXISTS  `", table_sub, "` ;");

SET @V_EXEC_SQL = V_EXEC_SQL;
 PREPARE STMT FROM @V_EXEC_SQL;     
 EXECUTE STMT ;                     
 DEALLOCATE PREPARE STMT;

防止存储过程意外退出导致上次执行的时候没有删除掉表格,最好在建表前先执行下删表语句。

猜你喜欢

转载自blog.csdn.net/u013240609/article/details/81783413