保存新的单据后,创建了任务流程。现在要把保存的单据删除掉,同时将产生的任务流程删除掉,我自己写了个存储过程,不知道是否正确,请给与指导,谢谢!!!
CREATE OR REPLACE PROCEDURE proc_del_flow_task ( --删除流程任务
as_bill_guid VARCHAR2)
AS
CURSOR cur_flow
IS
SELECT fid, fguid
FROM tflow;
lb_fid BLOB;
li_amount INTEGER;
li_offset INTEGER;
ls_hexstr VARCHAR2 (100);
ls_bill_guid VARCHAR2 (100);
lbl_find BOOLEAN;
ls_tflow_fguid VARCHAR2 (100);
BEGIN
li_amount := 100;
li_offset := 1;
lbl_find := FALSE;
OPEN cur_flow;
LOOP
FETCH cur_flow
INTO lb_fid, ls_tflow_fguid;
EXIT WHEN cur_flow%NOTFOUND;
DBMS_LOB.READ (lb_fid, li_amount, li_offset, ls_hexstr);
ls_bill_guid := func_hex_to_asc (ls_hexstr);--该函数是将16进制数字转换为字符串
--只截取前32位字符
ls_bill_guid := SUBSTR (ls_bill_guid, 1, 32);
IF ls_bill_guid = as_bill_guid
THEN
lbl_find := TRUE;
EXIT;
END IF;
END LOOP;
CLOSE cur_flow;
IF lbl_find
THEN
--找到了单据guid对应的流程ID了
--根据tflow.fguid = tflowid.FFLOWGUID的关联关系删除流程ID表的记录
DELETE FROM tflowid
WHERE fflowguid = ls_tflow_fguid;
--根据tflow.fguid = ttask.FFLOWGUID的关联关系
--以及ttask.fguid = TTASKMESSAGE.FTASKGUID的关联关系,删除任务消息表TTASKMESSAGE中的记录
DELETE FROM ttaskmessage a
WHERE EXISTS (
SELECT 1
FROM ttask b
WHERE a.ftaskguid = b.fguid
AND b.fflowguid = ls_tflow_fguid);
--再根据ttask.fguid = TTASKBIZDATA.FTASKGUID的关联关系,删除任务业务数据表TTASKBIZDATA中的记录
DELETE FROM ttaskbizdata a
WHERE EXISTS (
SELECT 1
FROM ttask b
WHERE a.ftaskguid = b.fguid
AND b.fflowguid = ls_tflow_fguid);
--然后删除任务表TTASK的记录
DELETE FROM ttask
WHERE fflowguid = ls_tflow_fguid;
--最后删除流程表对应记录
DELETE FROM tflow
WHERE fguid = ls_tflow_fguid;
END IF;
EXCEPTION
WHEN OTHERS
THEN
RAISE;
END;
/ |