通过存储过程拼装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;
防止存储过程意外退出导致上次执行的时候没有删除掉表格,最好在建表前先执行下删表语句。