112 lines
3.9 KiB
SQL
112 lines
3.9 KiB
SQL
call SP_GENERATE_FORMATTED_SEQUENCE( 'JSXMlxdj' --key,同一个模块同一个流程必须唯一 ,
|
||
'{?REQUESTID}' --传值 ,
|
||
'{?sqrq}' --日期传值,默认传2025-02-11字符串格式,
|
||
'formtable_main_1576' --需要被update的表单名称 ,
|
||
'jsxmbh' --需要被update的字段名称 ,
|
||
'requestid' --被update的where条件的字段名,
|
||
'#P-#Y-#S4' --编号排列,#S4代表补位4个,比如0014。排列也可以是'[#p-#Y]/#S',输出结果是[JSXM-2025]/1,
|
||
'JSXM' --这个就是上面的#p )
|
||
|
||
|
||
--批量更新历史表单的编号
|
||
DECLARE
|
||
v_count NUMBER := 0;
|
||
v_error_count NUMBER := 0;
|
||
v_total_count NUMBER := 0;
|
||
|
||
-- 游标:获取所有需要更新的记录(按ID排序)
|
||
CURSOR c_records IS
|
||
SELECT xglc, djrq
|
||
FROM uf_gcxx
|
||
WHERE xglc IS not NULL -- 只更新空编号的记录
|
||
ORDER BY xglc; -- 按ID排序
|
||
|
||
BEGIN
|
||
-- 统计总记录数
|
||
SELECT COUNT(*) INTO v_total_count
|
||
FROM uf_gcxx
|
||
WHERE xglc IS not NULL;
|
||
|
||
DBMS_OUTPUT.PUT_LINE('开始批量更新历史数据...');
|
||
DBMS_OUTPUT.PUT_LINE('需要更新的记录总数: ' || v_total_count);
|
||
DBMS_OUTPUT.PUT_LINE('----------------------------------------');
|
||
|
||
-- 遍历每条记录
|
||
FOR rec IN c_records LOOP
|
||
BEGIN
|
||
-- 调用存储过程为每条记录生成编号
|
||
SP_GENERATE_FORMATTED_SEQUENCE(
|
||
'JSXMlxdj', -- 序列键
|
||
rec.xglc, -- 请求ID/记录ID
|
||
rec.djrq, -- 日期值
|
||
'uf_gcxx', -- 目标表名
|
||
'gcbhz', -- 目标字段名
|
||
'xglc', -- 记录ID字段名
|
||
'#P-#Y-#S4', -- 编号格式模式
|
||
'JSXM' -- 前缀
|
||
);
|
||
|
||
v_count := v_count + 1;
|
||
|
||
-- 每处理100条记录显示一次进度
|
||
IF MOD(v_count, 100) = 0 THEN
|
||
DBMS_OUTPUT.PUT_LINE('已处理: ' || v_count || '/' || v_total_count || ' 条记录');
|
||
END IF;
|
||
|
||
EXCEPTION
|
||
WHEN OTHERS THEN
|
||
v_error_count := v_error_count + 1;
|
||
DBMS_OUTPUT.PUT_LINE('处理记录失败 - ID: ' || rec.xglc || ', 日期: ' || rec.djrq || ', 错误: ' || SQLERRM);
|
||
|
||
-- 如果错误太多,停止处理
|
||
IF v_error_count > 50 THEN
|
||
DBMS_OUTPUT.PUT_LINE('错误过多,停止处理');
|
||
EXIT;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
DBMS_OUTPUT.PUT_LINE('----------------------------------------');
|
||
DBMS_OUTPUT.PUT_LINE('批量更新完成!');
|
||
DBMS_OUTPUT.PUT_LINE('成功更新: ' || v_count || ' 条记录');
|
||
DBMS_OUTPUT.PUT_LINE('失败记录: ' || v_error_count || ' 条记录');
|
||
|
||
-- 验证更新结果
|
||
DECLARE
|
||
v_updated_count NUMBER;
|
||
v_empty_count NUMBER;
|
||
BEGIN
|
||
SELECT COUNT(*) INTO v_updated_count
|
||
FROM uf_gcxx
|
||
WHERE gcbhz IS NOT NULL AND gcbhz != '';
|
||
|
||
SELECT COUNT(*) INTO v_empty_count
|
||
FROM uf_gcxx
|
||
WHERE gcbhz IS NULL OR gcbhz = '';
|
||
|
||
DBMS_OUTPUT.PUT_LINE('----------------------------------------');
|
||
DBMS_OUTPUT.PUT_LINE('验证结果:');
|
||
DBMS_OUTPUT.PUT_LINE('已有编号的记录: ' || v_updated_count);
|
||
DBMS_OUTPUT.PUT_LINE('仍为空编号的记录: ' || v_empty_count);
|
||
END;
|
||
|
||
EXCEPTION
|
||
WHEN OTHERS THEN
|
||
DBMS_OUTPUT.PUT_LINE('批量更新过程出错: ' || SQLERRM);
|
||
ROLLBACK;
|
||
END;
|
||
|
||
|
||
--更新模块后使用update同步到流程表单
|
||
UPDATE formtable_main_1576 a
|
||
SET jsxmbh = (
|
||
SELECT gcbhz
|
||
FROM uf_gcxx
|
||
WHERE xglc = a.requestid
|
||
)
|
||
WHERE EXISTS (
|
||
SELECT 1
|
||
FROM uf_gcxx
|
||
WHERE xglc = a.requestid
|
||
);
|