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 使用游标进行删除操作的存储过程的更多相关文章

  1. Entity Framework 6 Recipes 2nd Edition(10-8)译 - >映射插入、修改、删除操作到存储过程

    10-8. 映射插入.修改.删除操作到存储过程 问题 想要映射插入.修改.删除操作到存储过程 解决方案 假设已有运动员实体模型,如Figure 10-8所示. 对应的数据库表如Figure 10-9所 ...

  2. mysql大数据表删除操作锁表,导致其他线程等待锁超时(Lock wait timeout exceeded; try restarting transaction;)

    背景: 1.有一个定时任务,每10分钟入一批统计数据: 2.另一个定时任务,每天定时清理7天前数据,此定时任务每天01:18:00执行: 现象: 每天01:20:00的统计数据入库失败,异常信息如下, ...

  3. MySql 中游标,事务,终止存储过程方法总结

    最近在项目开发中,有段逻辑处理,需要在网站,app,后台分别运行,这样给后期的维护带来了很大的不方便,容易遗漏app端或者后台,所以讲java代码转换成存储过程,把逻辑处理写在了mysql端,其中遇到 ...

  4. Mysql多表关联删除操作

    直接看Sql即可: ;

  5. Mysql 视图 游标 触发器 存储过程 事务

    Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中 ...

  6. 总结: MySQL(基础,字段约束,索引,外键,存储过程,事务)操作语法

    1. 显示数据库列表 show databases; # 查看当前所有数据库 show databases \G   #以行的方式显示 2. 在命令行中,执行sql语句 mysql -e 'show ...

  7. python对MySQL进行添加修改删除以及字符串的操作

    # coding=UTF-8 import MySQLdb def dbDperate(sql,param): "定义数据库的添加,修改和删除操作" #获取数据库的连接对象 con ...

  8. Entity Framework 6 Recipes 2nd Edition(10-10)译 - > 为TPH继承的插入、更新、删除操作映射到存储过程

    10-10. 为TPH继承的插入.更新.删除操作映射到存储过程 问题 TPH继承模型,想把它的插入.修改.删除操作映射到存储过程 Solution 假设数据库有一个描述不同种类的产品表(Product ...

  9. mySql事务_ _Java中怎样实现批量删除操作(Java对数据库进行事务处理)?

      本文是记录Java中实现批量删除操作(Java对数据库进行事务处理),在开始之前先来看下面这样的一个页面图: 上面这张图片显示的是从数据库中查询出的出租信息,信息中进行了分页处理,然后每行的前面提 ...

随机推荐

  1. 从点亮一个LED开始,Cortex-A9裸机程序设计

    电路原理图: 如何点亮一个LED? 通过对原理图进行分析,我们能够发现给三极管的基极加上一个高点平时,三级管be结导通构成通路,此时二极管就点亮了.若要将LED熄灭只需取消高电平输出. 如何使三级管基 ...

  2. Picasso – Android系统的图片下载和缓存类库

    Picasso – Android系统的图片下载和缓存类库 Picasso 是Square开源的一个用于Android系统下载和缓存图片的项目.该项目和其他一些下载图片项目的主要区别之一是:使用4.0 ...

  3. oracle监听服务开启

    输入命令netca即可开启oracle的监听服务 弹出对话框 选择监听服务配置,单击下一步 选择增加监听,单击下一步 监听的名字,默认即可,下一步 监听链接的协议,默认TCP协议即可,下一步 监听默认 ...

  4. Tomcat项目部署方式

    一.静态部署 1.直接将web项目文件件拷贝到webapps 目录中      Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用.所以可以将JS ...

  5. Rect

    判断给定的点是否被一个CGRect包含,可以用CGRectContainsPoint函数   BOOL contains = CGRectContainsPoint(CGRect rect, CGPo ...

  6. js实现楼层效果

    今天自己写个楼层效果,有一点烦躁,小地方犯错误.各位大神来修改不足啊!!! <!DOCTYPE html><html lang="en"><head& ...

  7. C/C++中的const int*和int * const

    代码: #include <iostream> using namespace std; int main(){ const int *p; ; p = &a; a = ; cou ...

  8. OpenCV——手势识别

    使用ANN神经网络训练数据后进行手势识别. #include "header.h" int main() { ; //训练每类图片数量 ; //训练类数3:石头剪刀布 ; ; st ...

  9. INI文件格式

    最近在看git命令,遇到INI文件格式,上网查了一下,把它总结一下: 程序没有任何配置文件,那么它对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,为了让程序出厂后还能根据需要 ...

  10. UIWebView与JavaScript(JS) 回调交互 -备

    很多关于objc 与 js 交互的文章都比较适用于 mac开发,iOS的webview 还是有所不一样, 参考:http://blog.sina.com.cn/s/blog_693de6100102v ...