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_

/* 声明历史活动实例的游标 */

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使用游标删除数据库_mysql 使用游标进行删除操作的存储过程相关推荐

  1. 什么是mysql的游标_数据库中的游标到底是什么意思

    数据库中的游标到底是什么意思 关注:177  答案:2  mip版 解决时间 2021-01-15 20:54 提问者更无风月 2021-01-15 15:53 数据库中的游标到底是什么意思 最佳答案 ...

  2. mysql数据库表删除数据库_mysql删除数据库和删除数据库中的表

    1. select sleep(2);执行睡眠2秒 2. delete from tablename:清空一个表内容,但不清空表结构,该表格仍然存在,而且表格中列的信息不会改变 drop table ...

  3. 修改mysql 外删除用户_mysql添加用户、删除用户、授权、修改密码等

    mysql添加用户.删除用户.授权.修改密码等 1.新建用户. //登录MYSQL @>mysql -u root -p @>密码 //创建用户 mysql> mysql> i ...

  4. sae mysql 同步本地_MYSQL入门之三_将本地MySQL数据导入SAE数据库_MySQL

    bitsCN.com MYSQL入门之三_将本地MySQL数据导入SAE数据库 1. MySQL字符集 MySQL的默认字符集是latin1,将本地MySQL库导出成sql,再导入到SAE的MySQL ...

  5. mysql使用命令访问数据库_mysql命令操作数据库

    命令行创建数据库 CREATE DATABASE rst_xxh DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 显示所有库 show data ...

  6. mysql 修改多表数据库_mysql数据库:mysql增删改、单表、多表及子查询

    本文目录: 一.数据增删改 增加数据 insert [into] 表名[(可选字段名)] values(一堆值1),(一堆值2),..... into 可以省略 表名后的字段可以选 如果写了 后面的v ...

  7. mysql中如何创建数据库_Mysql 中如何创建数据库和数据表

    这里的数据库为:user  数据表为 aaa mysql –uroot –p                 进入mysql create database user;            创建数据 ...

  8. 【MySQL】启动、数据库/数据表 创建/查看/删除

    文章目录 1. 启动数据库 mysql -u root -p 2. 数据库创建.查看.删除 2.1 数据库查看 show databases 2.2 选择数据库 select database() m ...

  9. mysql 创建 utf8 的数据库_mysql创建utf8数据库

    CentOS6.5下通过Shell创建.备份.还原MySQL数据库 CentOS6.5下通过Shell创建.备份.还原MySQL数据库 创建数据库: mysql -uroot -p123456 -e ...

最新文章

  1. 路由和交换机工作原理
  2. python异常处理类源码_Flask源码异常处理问题
  3. JNI编译时错误 编码GBK的不可映射字符 解决方法
  4. jQuery学习笔记(四)——表单选择
  5. BOOST_TEST_FOREACH宏相关的测试程序
  6. api-gateway实践(03)新服务网关 - 网关请求拦截检查
  7. Doris 之Frontend(FE)和Backend(BE)配置
  8. 备用计算机机房管理制度,计算机机房管理规定
  9. 对于PS色彩调整的初步认识
  10. cad怎么把图层英文变成中文_cad图层英文
  11. 如何提高计算机打字,如何练电脑打字速度,教你如何科学提高打字速度
  12. DES入盒前的CPA攻击
  13. Win11 PS2022 打开文件闪退
  14. 【转】最浅显的LDAP介绍
  15. 软件测试行业能干的多少岁?是不是真的只能干到35.....
  16. FlexRay关注事项2_网络总线资源分配问题
  17. xilinx芯片cadence原理图库制作
  18. 寄存器就是这么写出来的
  19. 22.3.8欧拉函数
  20. 【每周一本书】之《深度学习核心技术与实践》:“小猿搜题”团队倾力之作...

热门文章

  1. Java中的weak reference 和 soft reference
  2. 运维工具 Ansible 快速入门教程
  3. 你需要知道的基础算法知识——STL和基础数据结构(四)
  4. oracle数据泵导入分区表,Oracle 10g 数据泵分区表的导出
  5. java web怎么快速设计网页_Javaweb毕业设计快速开发指南(一)
  6. mysql dns反向解析_DNS练习之反向解析(示例代码)
  7. mysql 查询语句属性值_MySQL学习——SQL查询语句(一)
  8. debian apache php mysql_Debian/在Debian上安装Apache Mysql PHP
  9. JPA + EclipseLink + SAP云平台 = 运行在云端的数据库应用 1
  10. vector 函数都有哪些??