iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >delete-drop语句生成的存储过程
  • 169
分享到

delete-drop语句生成的存储过程

delete-drop语句生成的存储过程 2021-07-07 23:07:04 169人浏览 无得
摘要

问题:        开发时有时候需要对很多表进行操作。        例如:清空(删除)所有(某些)表,删除所有表某时间点之后导入的数据(类似于回滚) 解决方式:   对选定的表集合执行相同的查询条件(可为空),如果这个执行结果大于阈值

delete-drop语句生成的存储过程

问题:

       开发时有时候需要对很多表进行操作。

       例如:清空(删除)所有(某些)表,删除所有表某时间点之后导入的数据(类似于回滚)

解决方式:

  对选定的表集合执行相同的查询条件(可为空),如果这个执行结果大于阈值,则使用相同的条件组建delete语句。

  

delete_drop_sql生成器用法:
delete_drop_sql_generator
(var_where                           [where条件,可以为空,例如:" where LEFT(CREATE_time,19)>"2021-08-04""]
,var_include_tbl_list             [要包含的表名列表,优先于var_exclude_tbl_list,例如:"tbl_name1,tbl_name2"]
,var_exclude_tbl_list            [要排除的表名列表,仅在var_include_tbl_list为空时生效,例如:"tbl_name1,tbl_name2"]
,var_greater_than_value      [符合where条件要过滤的值,count(*)>=0 ]
)

 

  1  -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
  2 DROP PROCEDURE IF EXISTS delete_drop_sql_generator;
  3 DELIMITER %%
  4  CREATE PROCEDURE delete_drop_sql_generator(var_where VARCHAR(2048),var_include_tbl_list VARCHAR(2048),var_exclude_tbl_list VARCHAR(2048),var_greater_than_value VARCHAR(100)) 
  5 label:BEGIN
  6 
  7 
  8 
 15 DROP TABLE if exists temp_filter_table;
 16 DROP TABLE if exists temp_var_query_table;
 17 CREATE table temp_var_query_table(tbl_name VARCHAR(512));
 18 
 19 
 20 --   ----------配置项目-----------
 21  -- -- powered by wanglifeng Https://www.cnblogs.com/wanglifeng717
 22 
 23 SET @var_where = var_where;
 24 -- "LEFT(create_time,19)>"2021-08-04"";-- 格式:2021-08-11 16:32:37.872
 25 -- select @var_where;
 26 
 27 -- 如果含有include,则已include为准。
 28 if(var_include_tbl_list IS NULL  OR var_include_tbl_list="include_tbl_list" OR var_include_tbl_list="" OR var_include_tbl_list=" " OR var_include_tbl_list="  ") then 
 29     if(var_exclude_tbl_list IS NULL  OR var_exclude_tbl_list="exclude_tbl_list" OR var_exclude_tbl_list="" OR var_exclude_tbl_list=" " OR var_exclude_tbl_list="  ") then 
 30         -- 如果包含和不含字段都是为空,将库中所有的表加入进去。
 31         INSERT INTO temp_var_query_table SELECT t.table_name FROM infORMation_schema.tables t WHERE table_schema=DATABASE() AND t.TABLE_NAME !="temp_var_query_table";
 32     else
 33        -- 如果include为空,但是exclude不为空
 34         SET @exec_sql = CONCAT_WS("","INSERT INTO temp_var_query_table SELECT t.table_name FROM information_schema.tables t WHERE table_schema=DATABASE() AND t.TABLE_NAME not in ("", REPLACE(var_exclude_tbl_list, ",",CONCAT_WS("","","")),"")"); 
 35         PREPARE stmt  FROM @exec_sql;
 36         EXECUTE stmt;
 37         DEALLOCATE PREPARE stmt;
 38     END if;
 39 ELSE
 40     -- 插入静态字段
 41      SET @exec_sql = CONCAT_WS("","INSERT INTO temp_var_query_table SELECT t.table_name FROM information_schema.tables t WHERE table_schema=DATABASE() AND t.TABLE_NAME  in ("", REPLACE(var_include_tbl_list, ",",CONCAT_WS("","","")),"")"); 
 42     PREPARE stmt  FROM @exec_sql;
 43     EXECUTE stmt;
 44     DEALLOCATE PREPARE stmt;
 45 END if;
 46 
 47 -- select @exec_sql;    
 48 
 49 -- 自定义查找,如果自定义查找,请注释掉上面默认的全库查找
 50 
 51 -- INSERT INTO temp_query_table VALUES ("tbl_act_class"), ("tbl_act_info");
 52 
 53 
 54 
 55 
 56  -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
 57 
 58 
 59 
 60 SET  group_concat_max_len = 4294967295;
 61 
 62 -- select count(*) as "条数","tbl_cbm_app_entrance" as "表名","select count(*) from tbl_cbm_app_entrance   where LEFT(CREATE_time,19)>"2021-08-04"" as "执行的脚本" from tbl_cbm_app_entrance  where LEFT(CREATE_time,19)>"2021-08-04"
 63 SET @query_code="
 64 select (@row_id:=@row_id+1) as "序号", count(*) as "num","@tbl_name" as "tbl_name","select count(*) from @tbl_name  @var_where ;" as "执行的脚本" from @tbl_name, (select @row_id:=0 ) t @var_where 
 65 ";
 66 SELECT REPLACE(@query_code,"@var_where",@var_where) INTO @query_code;
 67 
 68 SELECT GROUP_CONCAT(
 69     t.temp SEPARATOR "
 uNIOn all 
")  INTO @var_query_sql
 70 FROM 
 71 (
 72     SELECT 
 73         REPLACE(@query_code,"@tbl_name",t.TABLE_NAME) as temp
 74     FROM information_schema.tables t
 75     WHERE table_schema=DATABASE() AND t.table_name IN( SELECT * FROM temp_var_query_table WHERE tbl_name NOT IN("temp_var_query_table"))
 76  ) t;
 77 
 78 -- select @var_query_sql;
 79 
 80 SET @exe_sql = @var_query_sql;
 81 PREPARE stmt FROM @exe_sql;
 82 EXECUTE stmt;
 83 DEALLOCATE PREPARE stmt;
 84 
 85 
 86 -- 组成建表语句
 87 
 94 
 95 DROP TABLE if exists temp_filter_table;
 96 SET @exe_sql = CONCAT_WS("","create table temp_filter_table as select t.tbl_name from (",@var_query_sql,") t where t.num>=",var_greater_than_value);
 97 
 98 PREPARE stmt FROM @exe_sql;
 99 EXECUTE stmt;
100 DEALLOCATE PREPARE stmt;
101 
102 -- select @exe_sql;
103 
104 
105 
106 SELECT CONCAT(
107                 "SET FOREIGN_KEY_CHECKS = 0;",
108                 "
",
109                  GROUP_CONCAT(
110                                      CONCAT("drop table "," ",tbl_name,"; ") 
111                                     SEPARATOR "
"
112                                ),
113                  "
",
114                  "SET FOREIGN_KEY_CHECKS = 1;"
115                 )  INTO @drop_sql_code
116 FROM temp_filter_table;
117 
118 SELECT CONCAT(
119                 "SET FOREIGN_KEY_CHECKS = 0;",
120                 "
",
121                  GROUP_CONCAT(
122                                      CONCAT_WS("","delete from ",tbl_name," ",@var_where,";") 
123                                     SEPARATOR "
"
124                                ),
125                  "
",
126                  "SET FOREIGN_KEY_CHECKS = 1;"
127                 ) INTO @delete_sql_code
128 FROM temp_filter_table;
129 
130 SELECT CONCAT(
131                 "SET FOREIGN_KEY_CHECKS = 0;",
132                 "
",
133                  GROUP_CONCAT(
134                                  CONCAT_WS("","select * from ",tbl_name," ",@var_where,";") 
135                                     SEPARATOR "
"
136                                ),
137                  "
",
138                  "SET FOREIGN_KEY_CHECKS = 1;"
139                 ) INTO @select_sql_code
140 FROM temp_filter_table;
141 
142 SELECT "代码","作用" LIMIT 0
143 UNION ALL
144 SELECT  @select_sql_code ,"查询语句"
145 UNION ALL
146 SELECT  @delete_sql_code,"删除语句"
147 UNION ALL 
148 SELECT  @drop_sql_code ,"drop表语句";
149 
150  DROP TABLE if exists temp_filter_table;
151  DROP TABLE if exists temp_var_query_table;
152 END %%
153 DELIMITER ;
154 
155 -- SELECT * from temp_var_query_table;
156 
157 -- CALL delete_drop_sql_generator(" where LEFT(CREATE_time,19)>"2021-08-04"","","","0");
delete_drop_sql语句生成器

 

 

 

 

 

 

 本文来自云海天,作者:wanglifeng,转载请注明原文链接:https://www.cnblogs.com/wanglifeng717/p/15838755.html

您可能感兴趣的文档:

--结束END--

本文标题: delete-drop语句生成的存储过程

本文链接: https://www.lsjlt.com/news/9084.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 存储过程中的MySQL PREPARE语句
    MySQL PREPARE语句用于在存储过程中动态准备和执行SQL语句。它的语法如下:```PREPARE statement_na...
    99+
    2023-09-27
    MySQL
  • oracle怎么查看存储过程语句
    可通过三种方法查看 oracle 存储过程语句:1. 使用 sql*plus 查询 user_source 表;2. 在 sql developer 中右键单击存储过程并选择“编辑”;3...
    99+
    2024-04-18
    oracle
  • 存储过程批量生成awr脚本
    DECLARE        l_snap_start       NUMBER := 40078;     l_s...
    99+
    2024-04-02
  • oracle数据库查看存储过程的语句
    查看 oracle 数据库中的存储过程语句:1. 查询数据字典;2. 使用 dbms_metadata 包;3. 使用命令行工具(如 sql*plus 或 sql developer)。...
    99+
    2024-05-10
    oracle
  • mysql中存储过程体语句是什么
    本篇文章给大家分享的是有关mysql中存储过程体语句是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.存储过程体包含了在过程调用时必须执行的语句,例如:dml、ddl语句...
    99+
    2023-06-14
  • plsql调用存储过程语句怎么写
    要调用存储过程,可以使用以下语句:```BEGINprocedure_name(parameter1, parameter2, .....
    99+
    2023-10-11
    plsql
  • mysql中执行存储过程的语句怎么写
    这篇文章主要介绍了mysql中执行存储过程的语句怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql中执行存储过程的语句怎么写文章都会有所收获,下面我们一起来看看吧。...
    99+
    2024-04-02
  • mysql存储过程中的循环语句怎么写
    今天小编给大家分享一下mysql存储过程中的循环语句怎么写的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起...
    99+
    2024-04-02
  • MySql动态sql语句带参数的存储过程
    这篇文章主要介绍“MySql动态sql语句带参数的存储过程”,在日常操作中,相信很多人在MySql动态sql语句带参数的存储过程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • oracle查看所有存储过程语句的命令
    可以通过使用 select object_name, object_type, text from dba_objects where object_type = '...
    99+
    2024-05-13
    oracle
  • oracle怎么查看存储过程语句的数据
    可以通过以下方法查看 oracle 存储过程语句数据:使用 dbms_metadata 包中的 get_ddl 函数获取存储过程 ddl 语句,其中包括正文。使用 sql develop...
    99+
    2024-04-18
    oracle
  • oracle怎么查看存储过程语句文件
    oracle 中查看存储过程语句文件的方法有:查看存储过程定义:select text from user_source where type = 'procedur...
    99+
    2024-04-18
    oracle
  • SQL中怎么用语句查看存储过程
    在SQL中,可以使用以下语句来查看存储过程:sqlSHOW PROCEDURE STATUS;这条语句将显示数据库中所有存储过程的信...
    99+
    2023-10-18
    SQL
  • SQL语句中删除表数据drop、truncate和delete的用法
    一、SQL中的语法 1、drop table 表名称 eg: drop table dbo.Sys_Test 2、truncate table 表名称 eg: truncate table dbo.Sys_Test ...
    99+
    2023-08-31
    sql 数据库 sqlserver mysql Powered by 金山文档
  • mysql储存过程中循环语句有哪些
    mysql存储过程中提供while和repeat两种循环语句:while循环:根据条件重复执行代码块,条件为真时继续执行。repeat循环:先执行代码块,再检查条件是否为真,为假则再次执...
    99+
    2024-04-22
    mysql 代码可读性
  • 如何实现MySQL中创建存储过程的语句?
    如何实现MySQL中创建存储过程的语句?MySQL是一种常用的关系型数据库管理系统,它提供了丰富的功能来实现数据的管理和查询。其中,存储过程是一种重要的数据库对象,它可以帮助我们封装一系列的SQL语句和逻辑,以便于重复使用和维护。本文将介绍...
    99+
    2023-11-08
    数据库编程 MySQL存储过程 创建过程语句
  • MySQL存储过程高级SQL语句怎么创建
    本篇内容主要讲解“MySQL存储过程高级SQL语句怎么创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL存储过程高级SQL语句怎么创建”吧!MySQL...
    99+
    2022-12-28
    mysql sql
  • MySQL IF 语句如何在存储过程中使用?
    MySQL IF 语句在存储过程中实现基本条件构造。其语法如下 -IF expression THEN Statements; END IF;它必须以分号结尾。为了演示 IF 语句在 MySQL 存储过程中的使用,我们将创建以下存储过程,该...
    99+
    2023-10-22
  • 怎么在mysql存储过程中使用case语句
    今天就跟大家聊聊有关怎么在mysql存储过程中使用case语句,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。除了if语句,mysql提供了一个替代的...
    99+
    2024-04-02
  • Oracle存储过程的控制和循环语句有哪些
    本篇内容主要讲解“Oracle存储过程的控制和循环语句有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle存储过程的控制和循环语句有哪些”吧!1、控...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作