--市案件审批--for 修复一单多派执行异常的情况,使用游标遍历执行
PROCEDURE PROC_CASEAPPLY(P_CASENUM VARCHAR2,
P_APPLYTYPE NUMBER,
P_ISAPPROVE NUMBER,
P_DAYS NUMBER,
P_REPCONTENT VARCHAR2,
P_RETURNVALUE OUT NUMBER) IS
V_CASEID NUMBER;
V_RECUSERID NUMBER;
V_TACHEID NUMBER;
V_ROLETYPE NUMBER;
BEGIN
--获取需更新的案件信息,因存在一单多派的情况,所以需遍历查询到的案件
declare--定义游标
cursor case_cursor is select 案件记录号 from 投诉业务表 where 市案件公文号 = P_CASENUM and 环节号 in (95, 96);
begin
for curcase in case_cursor loop--遍历游标
V_CASEID := curcase.案件记录号;
/*SELECT 案件记录号
INTO V_CASEID
FROM 投诉业务表
WHERE 市案件公文号 = P_CASENUM
AND 环节号 IN (95, 96);*/
SELECT 申请部门人员
INTO V_RECUSERID
FROM 案件申请表
WHERE 案件记录号 = V_CASEID
AND 是否最新 = 1
AND 申请类型 = P_APPLYTYPE;
SELECT ROLETYPE
INTO V_ROLETYPE
FROM TABBASEPERSON
WHERE CHVID = V_RECUSERID;
--退回
IF P_APPLYTYPE = 1 THEN
IF P_ISAPPROVE = 0 THEN
--驳回
UPDATE 案件申请表
SET 是否驳回 = 1, 答复时间 = SYSDATE, 答复内容 = P_REPCONTENT
WHERE 案件记录号 = V_CASEID
AND 申请类型 = 1
AND 是否最新 = 1;
UPDATE 投诉业务表 SET 环节号 = 98 WHERE 案件记录号 = V_CASEID;
V_TACHEID := 98;
ELSE
--批准
/*世道要变了,不能删除市级批准退回的案件。 yy 2015年3月19日10:29:08
DELETE FROM 投诉业务表 WHERE 案件记录号 = V_CASEID;
DELETE FROM TABDOCSTEP WHERE CASEID = V_CASEID;
DELETE FROM 案件申请表 WHERE 案件记录号 = V_CASEID;
*/
/*103:市批准退回*/
UPDATE 投诉业务表 T
SET T.环节号 = 103
WHERE T.市案件公文号 = P_CASENUM; --T.案件记录号 = V_CASEID;
V_TACHEID := 103;
UPDATE 案件申请表
SET 是否批准 = 1, 答复时间 = SYSDATE, 答复内容 = P_REPCONTENT
WHERE 案件记录号 = V_CASEID
AND 申请类型 = 1
AND 是否最新 = 1;
--转移结案表
PKG_TACHERUN.PRO_TRANSFORM(V_CASEID,
'投诉业务表',
'案件记录号',
'案件公文号,实际完成时间,规定完成时间,派单员,环节号,主办部门人员,主办部门,主办发送标志,主办签收标志');
END IF;
ELSE
--延期
IF P_ISAPPROVE = 0 THEN
--驳回
UPDATE 案件申请表
SET 是否驳回 = 1, 答复时间 = SYSDATE, 答复内容 = P_REPCONTENT
WHERE 案件记录号 = V_CASEID
AND 申请类型 = 2
AND 答复时间 IS NULL;
--AND 是否最新 = 1;
IF V_ROLETYPE = 29 THEN
UPDATE 投诉业务表 SET 环节号 = 117 WHERE 案件记录号 = V_CASEID;
V_TACHEID := 117;
ELSIF V_ROLETYPE = 28 THEN
UPDATE 投诉业务表 SET 环节号 = 18 WHERE 案件记录号 = V_CASEID;
V_TACHEID := 18;
END IF;
ELSE
UPDATE 案件申请表
SET 答复时间 = SYSDATE, 答复内容 = P_REPCONTENT, 是否批准 = 1
WHERE 案件记录号 = V_CASEID
AND 申请类型 = 2
--AND 是否最新 = 1;
AND 答复时间 IS NULL;
IF V_ROLETYPE = 28 THEN
UPDATE 投诉业务表 SET 环节号 = 17 WHERE 案件记录号 = V_CASEID;
V_TACHEID := 17;
ELSIF V_ROLETYPE = 29 THEN
UPDATE 投诉业务表 SET 环节号 = 116 WHERE 案件记录号 = V_CASEID;
V_TACHEID := 116;
END IF;
UPDATE 投诉业务表
SET 办理时间 = 办理时间 + P_DAYS * 1440,
规定完成时间 = 规定完成时间 + P_DAYS,
市办理时限 = 市办理时限 + P_DAYS * 1440,
市规定完成时间 = 市规定完成时间 + P_DAYS
WHERE 市案件公文号 = P_CASENUM;
END IF;
END IF;
--更新环节表数据
UPDATE TABDOCSTEP
SET STATE = 3, ISNEWEST = 0, SENDDATE = SYSDATE
WHERE ISNEWEST = 1
AND RECID = PKG_CONSTANT.USERIDCITY
AND CASEID = V_CASEID;
--添加环节表数据
INSERT INTO TABDOCSTEP
(STEPID, CASEID, SENDID, RECID, TACHEID)
VALUES
(SEQ_TABDOCSTEP.NEXTVAL,
V_CASEID,
PKG_CONSTANT.USERIDCITY,
V_RECUSERID,
V_TACHEID);
end loop;
end;
P_RETURNVALUE := 1;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE);
DBMS_OUTPUT.PUT_LINE(SQLERRM);
P_RETURNVALUE := 0;
ROLLBACK;
END;
Oracle 存储过程游标遍历查询信息,并打印输出异常信息
最新推荐文章于 2024-08-27 20:37:52 发布