mysql 使用游标进行删除操作的存储过程
BEGIN
DECLARE hprocessInstanceId bigint DEFAULT 0; -- 历史流程实例id
DECLARE hprocessInstanceIdStarttime CHAR default ''; -- 历史流程实例启动时间
DECLARE hprocessInstanceIdEndtime CHAR default ''; -- 历史流程实例结束时间
DECLARE hactinstId BIGINT default 0; -- 历史活动实例id
DECLARE htaskId BIGINT default 0; -- 历史人工任务id
DECLARE hvarId BIGINT default 0; -- 历史流程变量id
DECLARE rexecutionId bigint default 0; -- 正在运行流程实例id
DECLARE rvarId bigint default 0; -- 正在运行流程变量id
DECLARE rtaskId bigint default 0; -- 正在运行人工任务id
DECLARE rswinmlanceId bigint DEFAULT 0; -- 泳道id,为了删除partation表记录。本项目无记录
DECLARE processCompleteFlag int default 0; -- 流程是否结束标识
DECLARE taskCompleteFlag int default 0; -- 任务是否结束标识
DECLARE doneFlag INT DEFAULT 0; -- 完毕标识,0:未完毕;1:已完毕
DECLARE notfound INT DEFAULT 0;-- 是否未找到数据 标记
-- 启动事物
-- START TRANSACTION;
/* 声明历史流程实例的游标 */
DECLARE hprocessInstanceRS CURSOR FOR SELECT dbid_,START_,END_ FROM jbpm4_hist_procinst where START_>='2014-0-0 0:0:0' and START_<'2015-0-0 0:0:0';
/* 声明历史活动实例的游标 */
DECLARE hactinstRS CURSOR FOR SELECT dbid_,HTASK_ FROM jbpm4_hist_actinst where HPROCI_=hprocessInstanceId;
/* 声明历史活动实例的游标 */
DECLARE htaskRS CURSOR FOR SELECT dbid_ FROM jbpm4_hist_task where DBID_=hactinstId;
/* 声明历史活动实例的游标 */
DECLARE hvarRS CURSOR FOR SELECT dbid_ FROM jbpm4_hist_var where HTASK_=rtaskId;
/** 声明正在运行流程实例的游标(历史表中由于各种原因未完毕的) **/
DECLARE rexecutionRS CURSOR FOR SELECT dbid_ FROM jbpm4_execution where DBID_=hprocessInstanceId;
/** 声明正在运行流程变量的游标(仅仅删除2014年条件下因为各种原因未完毕的流程实例所相应的流程变量) */
DECLARE rvarRS CURSOR FOR SELECT dbid_ FROM jbpm4_variable where EXECUTION_=hprocessInstanceId;
/** 声明正在运行的人工任务的游标(仅仅是2014年開始的流程实例所相应的) **/
DECLARE rtaskRS CURSOR FOR SELECT dbid_ FROM jbpm4_task where DBID_=rtaskId;
/** 声明泳道的结果集游标。为了删除paritation表。该项目没有记录,实际删除条数为0 **/
DECLARE rswinmlanceRS CURSOR FOR SELECT dbid_ FROM jbpm4_swimlane where dbid_=rswinmlanceId;
/* 异常处理 */
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET doneFlag = 1;
/** 删除s,使用嵌套循环..... **/
OPEN hprocessInstanceRS;
FETCH hprocessInstanceRS INTO hprocessInstanceId,hprocessInstanceIdStarttime,hprocessInstanceIdEndtime;-- 获取历史流程实例表的数据数据
REPEAT
IF hprocessInstanceIdEndtime='' THEN
-- 没有结束,运行删除正在运行的流程实例表
/** 1.查询正在运行的流程实例记录s **/
SET rexecutionId=hprocessInstanceId; -- 未完毕的流程实例与正在运行的流程实例id做相应
OPEN rexecutionRS;
FETCH rexecutionRS INTO rexecutionId;
REPEAT
/** 2.查询该流程实例下的全部正在运行的流程变量记录s 2**/
OPEN hvarRS;
FETCH hvarRS INTO rvarId;
REPEAT
/** 3.删除正在运行的流程变量所相应的人工任务记录s 3**/
delete from jbpm4_task where dbid_=rvarId;
/** 3.删除正在运行的流程变量所相应的人工任务记录e 3**/
delete from jbpm4_variable where dbid_=rvarId; -- 单条删除流程变量记录
FETCH hvarRS INTO rvarId;
UNTIL doneFlag END REPEAT;
CLOSE hvarRS;
/** 2.查询该流程实例下的全部正在运行的流程变量记录e 2**/
delete from jbpm4_execution where dbid_=rexecutionId; -- 单条删除流程对象记录
FETCH rexecutionRS INTO rexecutionId;
UNTIL doneFlag END REPEAT;
CLOSE rexecutionRS;
END IF;
/*** ======删除历史流程记录表相关数据===== **/
/** 1.查询活动实例表 s **/
OPEN hactinstRS;
FETCH hactinstRS INTO hactinstId,htaskId;
REPEAT
/** 2.查询历史人工活动表记录s **/
OPEN htaskRS;
FETCH htaskRS INTO htaskId;
REPEAT
/** 3.删除历史人工任务 **/
delete from jbpm4_hist_task where dbid_=htaskId;
FETCH htaskRS INTO htaskId;
UNTIL doneFlag END REPEAT;
CLOSE htaskRS;
/** 2.查询历史人工活动表记录s **/
FETCH hactinstRS INTO hactinstId,htaskId;
UNTIL doneFlag END REPEAT;
CLOSE hactinstRS;
/** 1.查询活动实例表 e **/
/*** ======删除历史流程记录表相关数据===== **/
/** 删除历史活动实例表 **/
delete from jbpm4_hist_actinst where HPROCI_=hprocessInstanceId;
SET doneFlag=0;
FETCH hprocessInstanceRS INTO hprocessInstanceId,hprocessInstanceIdStarttime,hprocessInstanceIdEndtime;-- 获取历史流程实例表的数据数据
UNTIL doneFlag END REPEAT;
CLOSE hprocessInstanceRS;
END
使用嵌套之后,10万-百万条数据量删除很慢。有什么解决方法没有?
mysql 使用游标进行删除操作的存储过程的更多相关文章
- Entity Framework 6 Recipes 2nd Edition(10-8)译 - >映射插入、修改、删除操作到存储过程
10-8. 映射插入.修改.删除操作到存储过程 问题 想要映射插入.修改.删除操作到存储过程 解决方案 假设已有运动员实体模型,如Figure 10-8所示. 对应的数据库表如Figure 10-9所 ...
- mysql大数据表删除操作锁表,导致其他线程等待锁超时(Lock wait timeout exceeded; try restarting transaction;)
背景: 1.有一个定时任务,每10分钟入一批统计数据: 2.另一个定时任务,每天定时清理7天前数据,此定时任务每天01:18:00执行: 现象: 每天01:20:00的统计数据入库失败,异常信息如下, ...
- MySql 中游标,事务,终止存储过程方法总结
最近在项目开发中,有段逻辑处理,需要在网站,app,后台分别运行,这样给后期的维护带来了很大的不方便,容易遗漏app端或者后台,所以讲java代码转换成存储过程,把逻辑处理写在了mysql端,其中遇到 ...
- Mysql多表关联删除操作
直接看Sql即可: ;
- Mysql 视图 游标 触发器 存储过程 事务
Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中 ...
- 总结: MySQL(基础,字段约束,索引,外键,存储过程,事务)操作语法
1. 显示数据库列表 show databases; # 查看当前所有数据库 show databases \G #以行的方式显示 2. 在命令行中,执行sql语句 mysql -e 'show ...
- python对MySQL进行添加修改删除以及字符串的操作
# coding=UTF-8 import MySQLdb def dbDperate(sql,param): "定义数据库的添加,修改和删除操作" #获取数据库的连接对象 con ...
- Entity Framework 6 Recipes 2nd Edition(10-10)译 - > 为TPH继承的插入、更新、删除操作映射到存储过程
10-10. 为TPH继承的插入.更新.删除操作映射到存储过程 问题 TPH继承模型,想把它的插入.修改.删除操作映射到存储过程 Solution 假设数据库有一个描述不同种类的产品表(Product ...
- mySql事务_ _Java中怎样实现批量删除操作(Java对数据库进行事务处理)?
本文是记录Java中实现批量删除操作(Java对数据库进行事务处理),在开始之前先来看下面这样的一个页面图: 上面这张图片显示的是从数据库中查询出的出租信息,信息中进行了分页处理,然后每行的前面提 ...
随机推荐
- Microsoft Dynamics CRM 2016 增强版的解决方案(CRM新特性,开发者的福利)
CRM在以前的版本中,如果你改变了一个字段(组织A)然后打算导入到其他组织(组织B),你必须创建一个解决方案,包括完整的实体,并导出导入.然而,如果其他团队成员正在相同的实体做了自定义但不想让这些变化 ...
- [CSAPP笔记][第二章信息的表示和处理]
信息的表示和处理 2.1 信息存储 机器级程序将存储器视为一个非常大的字节数组,称为虚拟存储器. 存储器的每个字节由一个唯一的数字表示,称为它的地址 所有可能地址的集合称为虚拟地址空间 2.1.1 十 ...
- thinking in java知识小记(一)
知识点一(javadoc): 使用javadoc时特别注意选择encoding和charset为utf-8,要不然生成的javadoc会是乱码,命令:javadoc -encoding utf-8 - ...
- 如何解决DE0-Nano的EPCS16 无法下载的问题:NO EPCS LAYOUT DATA --- LOOKING FOR SECTION [EPCS-XXXXXX]
在用NIOS的flashprogram对EPCSx进行烧录程序时,出现了No EPCS layout data --- looking for section [EPCS-XXXXXX]的错误,在网上 ...
- hdu5358 First One(尺取法)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud First One Time Limit: 4000/2000 MS (Java/ ...
- 【前端学习】javascript面向对象编程(继承和复用)
前言 继承,代码复用的一种模式.和其它高级程序语言相比,javascript有点点不一样,它是一门纯面向对象的语言,在JS中,没有类的概念,但也可以通过原型(prototype)来模拟对象 ...
- ViewDragHelper的使用
一.ViewDragHelper的原理 是一个能够自用移动ViewGroup内部View的控件. 通过获取ViewGroup的点击事件,之后通过Scroller滑动来进行对ViewGroup内部控件的 ...
- 安装python3.4
1.http://www.python.org下载适合自己机型的镜像文件 2.一路“next”到底,安装python到C盘上 3.计算机-属性-高级系统设置-环境变量,将刚刚安装的python路径添加 ...
- 序列!序列!- 零基础入门学习Python016
序列!序列! 让编程改变世界 Change the world by program 你可能发现了,小甲鱼把列表.元组和字符串放在一块儿来讲解是有道理的,我们发现Ta们之间有很多共同点: 1. 都可以 ...
- JS 没有块级作用域
在函数(方法)中声明的所有变量,他们在整个函数中都有定义 var scope="abc"; function f() { alert(scope); //显示undefine v ...