计算项预加工的主调用存储过程。
1 调用格式
p_dn_ci (
v_app varchar (50),
v_ci_or_cf varchar (100)
)
参数说明:
v_app:字符串类型;乐创者的应用名。因为1个乐创者服务支持多个应用,所以需要指定1个明确的应用。
v_ci_or_cf:字符串类型;计算项名称或字段名称(“计算项”或“计算项.字段”)。如果是“计算项”的名称,那么就计算这个计算项;如果是“计算项.字段”,则就专门计算该计算项内的某1个字段。
2 实现原理
本存储过程是lczWord在进行计算项预加工的主调用过程。
处理过程大致是:
1)分析参数 v_ci_or_cf,为 v_ci 和 v_cf 其中一个设置值;
2)记录状态,前置判定,直接调用存储过程的情况;
3)调用核心存储过程 p_dn_ci_compute:
CALL p_dn_ci_compute(
v_app, v_ci,v_cf,
i_count_field,
v_err,v_log
);
4)判定结果、记录状态。
3 存储过程
存储过程如下:
CREATE DEFINER=`root`@`%` PROCEDURE `p_dn_ci`(v_App VARCHAR (50),-- 应用
v_CI_or_CF VARCHAR (100))
LABEL1:BEGIN
DECLARE i_count_field INT (2) DEFAULT 0;
DECLARE v_log TEXT DEFAULT '';
DECLARE v_err VARCHAR(4096) DEFAULT '';
DECLARE v_ci VARCHAR(50) DEFAULT '';
DECLARE v_cf VARCHAR(50) DEFAULT '';
DECLARE i_index INT(2) DEFAULT 0;
DECLARE v_log_count INT(1) DEFAULT 0;
-- ------------------------
-- 判断v_ci和v_Cf
-- ------------------------
SET i_index = INSTR(v_CI_or_CF,'.');
IF i_index > 0 THEN
SET v_ci = LEFT(v_CI_or_cF,i_index-1);
SET v_cf = MID(v_CI_or_cF,i_index+1);
ELSE
SET v_ci = v_CI_or_CF;
SET v_cf = '';
END IF;
-- ------------------------
-- 记录状态,前置判定,直接调用存储过程的情况
-- ------------------------
SELECT COUNT(*) INTO v_log_count FROM dn_cc_jsx_yjg_jg WHERE yymc = v_App AND jsxmc = v_ci;
IF v_log_count = 0 THEN
INSERT INTO dn_cc_jsx_yjg_jg VALUES(UUID(),v_App,v_ci,v_cf,null,3,1,'database',now(),null);
END IF;
UPDATE dn_cc_jsx_yjg_jg SET rzbz = 2 WHERE yymc = v_App AND jsxmc = v_ci;
SELECT COUNT(*) INTO i_index FROM dn_dy_jsx WHERE yymc = v_App AND jsxmc = v_ci;
IF i_index = 0 THEN
UPDATE dn_cc_jsx_yjg_jg SET rzbz = 4, rzxx = CONCAT('{\"error\":\"不存在预加工计算项',v_ci,'\"}') WHERE yymc = v_App AND jsxmc = v_ci;
SELECT 1 ZT,CONCAT('{\"error\":\"不存在预加工计算项',v_ci,'\"}') CWXX FROM DUAL;
LEAVE LABEL1;
END IF;
IF v_cf <> '' THEN
SELECT COUNT(*) INTO i_index FROM dn_dy_jsx_zd WHERE yymc = v_App AND jsxmc = v_ci AND ZDMC = v_cf;
IF i_index = 0 THEN
UPDATE dn_cc_jsx_yjg_jg SET rzbz = 4, rzxx = CONCAT('{\"error\":\"不存在预加工计算项字段',v_ci,'.',v_cf,'\"}') WHERE yymc = v_App AND jsxmc = v_ci;
SELECT 1 ZT,CONCAT('{\"error\":\"不存在预加工计算项字段',v_ci,'.',v_cf,'\"}') CWXX FROM DUAL;
LEAVE LABEL1;
END IF;
ELSE
SELECT COUNT(*) INTO i_index FROM dn_dy_jsx_zd WHERE yymc = v_App AND jsxmc = v_ci;
IF i_index = 0 THEN
UPDATE dn_cc_jsx_yjg_jg SET rzbz = 4, rzxx = CONCAT('{\"error\":\"预加工计算项',v_ci,'不存在字段','\"}') WHERE yymc = v_App AND jsxmc = v_ci;
SELECT 1 ZT,CONCAT('{\"error\":\"预加工计算项',v_ci,'不存在字段','\"}') CWXX FROM DUAL;
LEAVE LABEL1;
END IF;
END IF;
-- ------------------------
-- 调用核心存储过程
-- ------------------------
CALL p_dn_ci_compute(
v_App, v_ci,v_cf,
i_count_field,
v_err,v_log
);
-- ------------------------
-- 判定结果记录状态
-- ------------------------
IF v_err <> '' THEN
UPDATE dn_cc_jsx_yjg_jg SET rzbz = 4,rzxx = CONCAT('{\"error\":\"',replace(v_err,"\"","""),'\",\"log\":[',v_log,']}'),jssj=now() WHERE yymc = v_App AND jsxmc = v_ci;
SELECT 1 ZT,CONCAT('{\"error\":\"',v_err,'\",\"log\":[',v_log,']}') CWXX
FROM DUAL;
ELSE
UPDATE dn_cc_jsx_yjg_jg SET rzbz = 3,rzxx = CONCAT(
'{\"volume\":\"',v_App,'\",',
'\"target\":\"',v_CI_or_CF,'\",',
'\"fieldCount\":\"',i_count_field,'\",',
'\"log\":[',v_log,']}'),jssj=now() WHERE yymc = v_App AND jsxmc = v_ci;
SELECT 0 ZT,
CONCAT(
'{\"volume\":\"',v_App,'\",',
'\"target\":\"',v_CI_or_CF,'\",',
'\"fieldCount\":\"',i_count_field,'\",',
'\"log\":[',v_log,']}') CWXX
FROM DUAL;
END IF;
END
作者:敏 创建时间:2024-09-14 15:41
最后编辑:敏 更新时间:2025-03-07 10:05
最后编辑:敏 更新时间:2025-03-07 10:05
