`

MYSQL通过SQL脚本创建存储过程(游标删除多表数据)

阅读更多
首先描述一下业务处理存储过程功能:删除除系统管理员创建的角色和对应的业务表数据。
[size=medium]
--  CALL P_INTSYS('%_10006%','10006');
drop procedure if exists wmscloud_test.P_INTSYS;

CREATE PROCEDURE wmscloud_test.P_INTSYS(IN likeTableName VARCHAR(30),IN esCorCode VARCHAR(30))

BEGIN
 
  -- 需要定义接收游标数据的变量 
  DECLARE table_ VARCHAR(50);
  -- 遍历数据结束标志
  DECLARE done INT DEFAULT FALSE;
  -- 游标
  DECLARE cur CURSOR FOR SELECT TABLE_NAME FROM (SELECT TABLE_NAME from information_schema.tables WHERE TABLE_NAME LIKE likeTableName ) allTables;
  -- 将结束标志绑定到游标
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  -- 打开游标
  OPEN cur;
   -- 开始循环
  read_loop: LOOP

  -- 提取游标里的数据,这里只有一个,多个的话也一样;
  FETCH cur INTO table_;
  -- 声明结束的时候
  IF done THEN
    LEAVE read_loop;
  END IF;

  -- 这里做你想做的循环的事件
    SET @delete_table=CONCAT(' DELETE FROM ',table_,';');
    PREPARE delete_table FROM @delete_table;
    EXECUTE delete_table;
  

  END LOOP;
  -- 关闭游标
  CLOSE cur;

  -- 删除,除去系统管理员创建的外其余用户和角色
  SET @delete_table=CONCAT(' DELETE FROM es_user WHERE CREATOR!=1 and ES_COR_CODE=',esCorCode);
  PREPARE delete_table FROM @delete_table;
  EXECUTE delete_table;

  SET @delete_table=CONCAT(' DELETE FROM es_role WHERE CREATOR!=1 and ES_COR_CODE=',esCorCode);
  PREPARE delete_table FROM @delete_table;
  EXECUTE delete_table;

END
[/size]
执行脚本生成的函数
[size=medium]BEGIN
 
  -- 需要定义接收游标数据的变量 
  DECLARE table_ VARCHAR(50);
  -- 遍历数据结束标志
  DECLARE done INT DEFAULT FALSE;
  -- 游标
  DECLARE cur CURSOR FOR SELECT TABLE_NAME FROM (SELECT TABLE_NAME from information_schema.tables WHERE TABLE_NAME LIKE likeTableName ) allTables;
  -- 将结束标志绑定到游标
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  -- 打开游标
  OPEN cur;
   -- 开始循环
  read_loop: LOOP

  -- 提取游标里的数据,这里只有一个,多个的话也一样;
  FETCH cur INTO table_;
  -- 声明结束的时候
  IF done THEN
    LEAVE read_loop;
  END IF;

  -- 这里做你想做的循环的事件
    SET @delete_table=CONCAT(' DELETE FROM ',table_,';');
    PREPARE delete_table FROM @delete_table;
    EXECUTE delete_table;
  

  END LOOP;
  -- 关闭游标
  CLOSE cur;

  -- 删除,除去系统管理员创建的外其余用户和角色
  SET @delete_table=CONCAT(' DELETE FROM es_user WHERE CREATOR!=1 and ES_COR_CODE=',esCorCode);
  PREPARE delete_table FROM @delete_table;
  EXECUTE delete_table;

  SET @delete_table=CONCAT(' DELETE FROM es_role WHERE CREATOR!=1 and ES_COR_CODE=',esCorCode);
  PREPARE delete_table FROM @delete_table;
  EXECUTE delete_table;

END[/size]

分享到:
评论

相关推荐

    SQL必知必会(第3版 中文高清版)

     a.2.2 下载dbms sql脚本  附录b 流行的应用系统   b.1 使用aqua data studio   b.2 使用db2   b.3 使用macromedia coldfusion   b.4 使用microsoft access   b.5 使用microsoft asp   b.6 ...

    SQL必知必会(第3版)--详细书签版

    本书涉及不同平台上数据的排序、过滤和分组,以及表、视图、联结、子查询、游标、存储过程和触发器等内容,通过本书读者可以系统地学习到sql 的知识和方法。  本书注重实用性,操作性很强,适合于sql 的初学者学习...

    SQL必知必会(第3版-PDF清晰版)part1

    19.4 创建存储过程..... 126 19.5 小结..... 129 第20章 管理事务处理...... 130 20.1 事务处理..... 130 20.2 控制事务处理..... 132 20.2.1 使用ROLLBACK.. 133 20.2.2 使用COMMIT... 133 20.2.3 使用保留点........

    PHP和MySQL Web开发第4版pdf以及源码

    10.3.2 从多个表中获取数据 10.3.3 以特定的顺序获取数据 10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询 10.4 更新数据库记录 10.5 创建后修改表 10.6 删除数据库中的记录 10.7 表的删除 ...

    PHP和MySQL WEB开发(第4版)

    10.3.2 从多个表中获取数据 10.3.3 以特定的顺序获取数据 10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询 10.4 更新数据库记录 10.5 创建后修改表 10.6 删除数据库中的记录 10.7 表的删除 10.8 ...

    浅谈MySQL存储过程中declare和set定义变量的区别

    在存储过程中常看到declare定义的变量和@set定义的变量。简单的来说,declare定义的类似是局部变量,@set定义的...(1)先执行下面脚本,创建一个存储过程,分别有declare形式的变量和@set形式的变量 DROP PROCEDURE

    python数据库编程:Python连接Mssql基础教程之Python库pymssql.pdf

    下⾯话不多说了,来⼀起看看详细的介绍吧 连接数据库 pymssql连接数据库的⽅式和使⽤sqlite的⽅式基本相同: 使⽤connect创建连接对象 connect.cursor创建游标对象,SQL语句的执⾏基本都在游标上进⾏ cursor.execute...

    MySQL数据库基础教程

    含MySQL数据库下载、安装、配置教程,以及存储过程、触发器、视图、事务、游标等基础sql练习脚本,是初学者基础入门不错的教程。

    PHP和MySQL Web开发第4版

    10.3.2 从多个表中获取数据 10.3.3 以特定的顺序获取数据 10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询 10.4 更新数据库记录 10.5 创建后修改表 10.6 删除数据库中的记录 10.7 表的删除 ...

    php网络开发完全手册

    16.3.2 存储过程的创建与调用 264 16.3.3 存储过程的参数 265 16.3.4 复合语句 267 16.3.5 变量 268 16.3.6 条件语句 269 16.3.7 循环语句 271 16.3.8 游标 273 16.3.9 存储过程的删除 275 16.4 触发器的设计 275 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS...

    sql数据库批量处理脚本

    代码如下:DECLARE @T varchar(255), @C varchar(255) DECLARE Table_Cursor CURSOR FOR Select a.name,b.name from sysobjects a, syscolumns b where a.id=b.id and a.xtype=’u’ and (b.xtype=99 or b.xtype=35 ...

    Java面试宝典2020修订版V1.0.1.doc

    35、MySQL、SqlServer、oracle写出字符存储、字符串转时间 52 36、update语句可以修改结果集中的数据吗? 53 37、oracle如何设置主键自动增长? 53 38、表连接、子查询的区别是什么?它们可以相互转化吗?你倾向于用...

    PHP mysqli_free_result()与mysqli_fetch_array()函数详解

    在脚本结束后所有关联的内存都会被自动释放。 在我们执行完SELECT语句后,释放游标内存是一个很好的习惯。 。可以通过PHP函数mysql_free_result()来实现内存的释放。 //定义头文件,字符格式 header("Content-type...

    javaSE代码实例

    8.5.8 通过重写扩展父类方法的功能 143 8.5.9 替代性原理 144 8.6 方法的重载 145 8.6.1 方法重载的规则 145 8.6.2 重载方法的匹配 145 8.6.3 重写与重载的区别 149 8.7 final与继承 149 8.7.1 最终...

Global site tag (gtag.js) - Google Analytics