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;
/** 宣告正在執行流程變數的游標(只刪除2023年條件下由於各種原因未完成的流程例項所對應的流程變數) */
declare rvarrs cursor for select dbid_ from jbpm4_variable where execution_=hprocessinstanceid;
/** 宣告正在執行的人工任務的游標(只是2023年開始的流程例項所對應的) **/
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 使用游標進行刪除操作的儲存過程
begin declare hprocessinstanceid bigint default 0 歷史流程例項id declare hprocessinstanceidstarttime char default 歷史流程例項啟動時間 declare hprocessinstanceidendti...
MYSQL使用游標
一 使用游標 一 宣告游標。delare cursor name cursor for select statement 解釋 cursor name是游標的名字 select statement表示select語句。因為游標需要遍歷結果集的每一行,增加了伺服器的負擔,導致游標的效率並不高效,如果使...
SQL 使用游標進行遍歷
前兩天乙個同事大叔問了這樣乙個問題,他要對錶做個類似foreach的效果,問我怎麼搞,我想了想,就拿游標回答他,當時其實也沒用過資料庫中的游標,但是以前用過ado裡面的,感覺應該差不多。首先,讓我們先來建張測試表 use loadtest2010 create table testcursor 建立...