CREATE OR REPLACE procedure mes_cx_rz_zzpnew_hand is a number(4); b varchar(4000); -- 为cxdata定义显式变量而不是使用%rowtype cxdata_contractno_num varchar2(100); cxdata_prod_name varchar2(200); cxdata_sg_sign varchar2(100); cxdata_sg_grade varchar2(100); cxdata_outer_diam varchar2(50); cxdata_wall_thickness varchar2(50); cxdata_material_code varchar2(100); cxdata_material_name varchar2(500); -- 特别关注这个字段 cxdata orderdetail_v@th_cx_link%rowtype; --加工 cursor oporder_cursor_jg is SELECT J.*,REPLACE(GET_CP_ORDER(J.Judge_Stove_No), '/', '') ORDERID,(select decode(max(s.order_typ), '120108', '双经销', '120109', '定销订购', '120107', '来料加工', '自用') from cxuser.slm_order_head s where s.order_no = regexp_replace(REPLACE(GET_CP_ORDER(J.Judge_Stove_No), '/', ''), '/.*', '')) contract_type,(case when j.judge_stove_no like 'W%' then '是' else '否' end) resource_type,null high_tech_code, null high_tech_name, 0 high_prod_weight, 0 high_mate_weight, 0 estimated_unit_price, 0 estimated_cost, '{3}' acct_period, get_pl_code((select max(GRADENAME) from PLN_ZY_ZG_m p where p.FEED_HEAT_NO = j.judge_stove_no), (select max(DIAMETER) from PLN_ZY_ZG_m p where p.FEED_HEAT_NO = j.judge_stove_no) --规格 ) billet_code FROM (select aa.JUDGE_STOVE_NO, aa.PLINE_NAME, sum(aa.act_COUNT) act_COUNT, sum(aa.WEIGHT) WEIGHT from ( --期初 SELECT T.JUDGE_STOVE_NO, T.PLINE_NAME, SUM(NVL(T.ACT_COUNT, 0)) act_COUNT, SUM(NVL(T.ACT_WEIGHT, 0)) WEIGHT FROM YDM_ZC_INITIAL_ZG T WHERE 1 = 1 AND t.bal_year_month = '{0}' group by t.JUDGE_STOVE_NO, t.PLINE_NAME UNION ALL --入库 select t.JUDGE_STOVE_NO, t.PLINE_NAME, nvl((case when t.BAL_YEAR_MONTH = '{0}' then nvl(t.count, 0) end), 0) act_COUNT, nvl((case when t.BAL_YEAR_MONTH = '{0}' then nvl(t.weight, 0) end), 0) WEIGHT from (SELECT REGEXP_REPLACE(T.JUDGE_STOVE_NO, '-.*', '') JUDGE_STOVE_NO, (CEIL(T.ACT_COUNT / S.SAW_NUM)) AS count, t.weight, t.BAL_YEAR_MONTH, t.PLINE_NAME FROM (SELECT T1.JUDGE_STOVE_NO, T1.BAL_YEAR_MONTH, (SELECT C.PLINE_NAME FROM COM_BASE_PLINE C WHERE C.PLINE_CODE = T1.PLINE_CODE) PLINE_NAME, SUM(T1.ACT_COUNT) ACT_COUNT, SUM(T1.INPUT_WEIGHT) weight FROM PORT_MIL_BATCH_SAMPLE_RESULT T1 WHERE T1.JUDGE_STOVE_NO = REGEXP_REPLACE(T1.JUDGE_STOVE_NO, '-.*', '') || '-01' AND T1.BAL_YEAR_MONTH = '{0}' GROUP BY T1.JUDGE_STOVE_NO, T1.BAL_YEAR_MONTH, T1.PLINE_CODE) T, MIL_PLAN S WHERE T.JUDGE_STOVE_NO = S.JUDGE_STOVE_NO AND S.BACK_PLAN_FLAG = '0' AND S.BACK_SLAB_FLAG = '0') t union all --出库 select t.JUDGE_STOVE_NO, t.PLINE_NAME, -nvl((case when t.BAL_YEAR_MONTH = '{0}' then nvl(t.count, 0) end), 0) act_COUNT, -nvl((case when t.BAL_YEAR_MONTH = '{0}' then nvl(t.weight, 0) end), 0) WEIGHT from (SELECT JUDGE_STOVE_NO, BAL_YEAR_MONTH, PLINE_NAME, SUM(COUNT) COUNT, SUM(WEIGHT) WEIGHT FROM (SELECT T1.JUDGE_STOVE_NO, T1.BAL_YEAR_MONTH, (SELECT C.PLINE_NAME FROM COM_BASE_PLINE C WHERE C.PLINE_CODE = T1.PLINE_CODE) PLINE_NAME, SUM(T1.OUTPUT_COUNT) AS COUNT, SUM(T1.OUTPUT_WEIGHT) AS WEIGHT FROM QCM_ZG_JUGDE_APPLY T1, MIL_PLAN S5 WHERE T1.JUDGE_STOVE_NO || '-01' = S5.JUDGE_STOVE_NO AND S5.BACK_PLAN_FLAG = '0' AND S5.BACK_SLAB_FLAG = '0' AND T1.PROCESS_CODE = 'D' AND T1.BAL_YEAR_MONTH = '{0}' AND ((T1.VALIDFLAG = '20' AND T1.TARGET <> 'A' AND T1.JUDGE_RESULT_CODE IN ('40740701', '40740705', '40740709')) OR (T1.VALIDFLAG = '20' AND T1.TARGET = 'A' AND T1.JUDGE_TOLRESULT_CODE IN ('40740701', '40740705', '40740709')) OR (T1.VALIDFLAG = '20' AND T1.TARGET = 'A' AND T1.IS_ALL_SCRAP = '1') OR T1.INSTANCY_FLAG = '1') AND T1.PLINE_CODE NOT IN ('C065', 'C066') GROUP BY T1.JUDGE_STOVE_NO, T1.BAL_YEAR_MONTH, T1.PLINE_CODE UNION ALL SELECT REGEXP_REPLACE(F.JUDGE_STOVE_NO, '-.*', '') JUDGE_STOVE_NO, F.BAL_YEAR_MONTH, S1.PLINE_NAME, COUNT(1) COUNT, SUM(S1.INPUT_WEIGHT) WEIGHT FROM (SELECT COUNT(1) ACOUNT, T3.JUDGE_STOVE_NO, T3.NEW_HEAT_NO, T3.BAL_YEAR_MONTH FROM (SELECT G2.*, T1.BAL_YEAR_MONTH FROM MIL_SLAB_SCRAP G2, QCM_ZG_JUGDE_APPLY T1 WHERE REGEXP_REPLACE(G2.NEW_HEAT_NO, '-.*', '') = T1.JUDGE_STOVE_NO AND (G2.REMARK <> '无' OR G2.REMARK IS NULL) AND ((t1.validflag = '20' and t1.JUDGE_RESULT_CODE in ('40740701', '40740705', '40740709')) OR T1.INSTANCY_FLAG = '1') AND T1.IS_FLAG = '0' AND T1.PROCESS_CODE = 'D' AND T1.BAL_YEAR_MONTH = '{0}' ) T3 WHERE T3.PROCESS_NO <= 6 AND T3.NEW_HEAT_NO IS NOT NULL GROUP BY T3.JUDGE_STOVE_NO, T3.NEW_HEAT_NO, T3.BAL_YEAR_MONTH) F, (SELECT SUM(S.INPUT_WEIGHT) INPUT_WEIGHT, S.JUDGE_STOVE_NO, S.M_MAT_NO, (SELECT C.PLINE_NAME FROM COM_BASE_PLINE C WHERE C.PLINE_CODE = S.PLINE_CODE) PLINE_NAME, ROW_NUMBER() OVER(PARTITION BY JUDGE_STOVE_NO ORDER BY JUDGE_STOVE_NO) RNUM FROM PORT_MIL_BATCH_SAMPLE_RESULT S WHERE S.TR_FLAG = '0' GROUP BY S.M_MAT_NO, S.JUDGE_STOVE_NO, S.PLINE_CODE) S1 WHERE F.JUDGE_STOVE_NO = S1.JUDGE_STOVE_NO AND RNUM <= F.ACOUNT GROUP BY F.JUDGE_STOVE_NO, F.BAL_YEAR_MONTH, S1.PLINE_NAME UNION ALL SELECT REGEXP_REPLACE(S.JUDGE_STOVE_NO, '-.*', '') JUDGE_STOVE_NO, T.BAL_YEAR_MONTH, S.PLINE_NAME, COUNT(1) COUNT, SUM(S.INPUT_WEIGHT) WEIGHT FROM (SELECT G1.*, T1.BAL_YEAR_MONTH FROM MIL_FURNACES_RESLUT_DETIA G1, QCM_ZG_JUGDE_APPLY T1 WHERE REGEXP_REPLACE(G1.ZP_JUDGE_STOVE_NO, '-.*', '') = T1.JUDGE_STOVE_NO AND (G1.REMARK <> '无' OR G1.REMARK IS NULL) AND ((t1.validflag = '20' and t1.JUDGE_RESULT_CODE in ('40740701', '40740705', '40740709')) OR T1.INSTANCY_FLAG = '1') AND T1.IS_FLAG = '0' AND T1.PROCESS_CODE = 'D' AND T1.BAL_YEAR_MONTH = '{0}' ) T, (SELECT SUM(S1.INPUT_WEIGHT) INPUT_WEIGHT, S1.M_MAT_NO, S1.JUDGE_STOVE_NO, (SELECT C.PLINE_NAME FROM COM_BASE_PLINE C WHERE C.PLINE_CODE = S1.PLINE_CODE) PLINE_NAME, ROW_NUMBER() OVER(PARTITION BY JUDGE_STOVE_NO ORDER BY JUDGE_STOVE_NO) RNUM FROM PORT_MIL_BATCH_SAMPLE_RESULT S1 WHERE S1.TR_FLAG = '0' GROUP BY S1.JUDGE_STOVE_NO, S1.M_MAT_NO, S1.PLINE_CODE) S WHERE T.JUDGE_STOVE_NO = S.JUDGE_STOVE_NO AND RNUM <= T.GROUP_NUM GROUP BY S.JUDGE_STOVE_NO, S.PLINE_NAME, T.BAL_YEAR_MONTH UNION ALL SELECT REGEXP_REPLACE(T8.JUDGE_STOVE_NO, '-.*', '') JUDGE_STOVE_NO, T7.BAL_YEAR_MONTH, T8.PLINE_NAME, COUNT(1) COUNT, SUM(INPUT_WEIGHT) WEIGHT FROM (SELECT T.OLD_ZP_JUDGE_STOVE_NO, CEIL(SUM(T.ZP_COUNT) / S.SAW_NUM) AS RN, T1.BAL_YEAR_MONTH FROM MIL_OFFLINE_GROUP T, MIL_PLAN S, QCM_ZG_JUGDE_APPLY T1 WHERE T.Old_Zp_Judge_Stove_No = S.JUDGE_STOVE_NO AND (T.REMARK <> '无' OR T.REMARK IS NULL) AND S.BACK_SLAB_FLAG <> '2' AND REGEXP_REPLACE(T.ZP_JUDGE_STOVE_NO, '-.*', '') = T1.Judge_Stove_No AND ((t1.validflag = '20' and t1.JUDGE_RESULT_CODE in ('40740701', '40740705', '40740709')) OR T1.INSTANCY_FLAG = '1') AND T1.IS_FLAG = '0' AND T1.PROCESS_CODE = 'D' AND T1.BAL_YEAR_MONTH = '{0}' GROUP BY T.OLD_ZP_JUDGE_STOVE_NO, S.SAW_NUM, T1.BAL_YEAR_MONTH) T7, (SELECT SUM(S2.INPUT_WEIGHT) INPUT_WEIGHT, S2.JUDGE_STOVE_NO, S2.M_MAT_NO, (SELECT C.PLINE_NAME FROM COM_BASE_PLINE C WHERE C.PLINE_CODE = S2.PLINE_CODE) PLINE_NAME, ROW_NUMBER() OVER(PARTITION BY JUDGE_STOVE_NO ORDER BY JUDGE_STOVE_NO) RNUM FROM PORT_MIL_BATCH_SAMPLE_RESULT S2 WHERE S2.TR_FLAG = '0' GROUP BY S2.M_MAT_NO, S2.JUDGE_STOVE_NO, S2.PLINE_CODE) T8 WHERE REGEXP_REPLACE(T7.OLD_ZP_JUDGE_STOVE_NO, '-.*', '') || '-01' = T8.JUDGE_STOVE_NO AND RNUM <= RN GROUP BY T8.JUDGE_STOVE_NO, T7.BAL_YEAR_MONTH, T8.PLINE_NAME) GROUP BY JUDGE_STOVE_NO, BAL_YEAR_MONTH, PLINE_NAME) t) aa group by aa.JUDGE_STOVE_NO, aa.PLINE_NAME) J WHERE act_COUNT > 0; curoporder_jg oporder_cursor_jg%rowtype; begin open oporder_cursor_jg; loop fetch oporder_cursor_jg into curoporder_jg; exit when oporder_cursor_jg%notfound; begin -- 添加内部begin块用于异常处理 select count(*) into a from orderdetail_v@th_cx_link t where t.contractno_num = curoporder_jg.orderid and material_code is not null; if a > 0 then -- 使用显式字段选择而不是select * select contractno_num, prod_name, sg_sign, sg_grade, outer_diam, wall_thickness, material_code, material_name into cxdata_contractno_num, cxdata_prod_name, cxdata_sg_sign, cxdata_sg_grade, cxdata_outer_diam, cxdata_wall_thickness, cxdata_material_code, cxdata_material_name from orderdetail_v@th_cx_link t where t.contractno_num = curoporder_jg.orderid and material_code is not null and rownum = 1; elsif substr(curoporder_jg.orderid, 1, 2) in ('TH', 'XS') then select count(*) into a from orderdetail_v@th_cx_link t where substr(t.contractno_num, 3) = substr(curoporder_jg.orderid, 3) and material_code is not null and rownum = 1; if a > 0 then select contractno_num, prod_name, sg_sign, sg_grade, outer_diam, wall_thickness, material_code, material_name into cxdata_contractno_num, cxdata_prod_name, cxdata_sg_sign, cxdata_sg_grade, cxdata_outer_diam, cxdata_wall_thickness, cxdata_material_code, cxdata_material_name from orderdetail_v@th_cx_link t where substr(t.contractno_num, 3) = substr(curoporder_jg.orderid, 3) and material_code is not null and rownum = 1; end if; end if; if INSTR(curoporder_jg.orderid, 'ZZBY') <= 0 then if a > 0 then insert into hot_production_mes_rz (cx_no, contract_type, prod_variety, steel_level, steel_no, spec, prod_type, prod_weight, mate_weight, steel_waste, process, high_tech_code, high_tech_name, high_prod_weight, high_mate_weight, estimated_unit_price, estimated_cost, acct_period, mate_code, resource_type, billet_code, memo, flag, go_there, mate_name, orderid,judge_stove_no,PRE_PROCESS,DELIVERY_STATUS,INSERT_TIME) values (seq_mes_cx.nextval, curoporder_jg.contract_type, cxdata_prod_name, cxdata_sg_sign, cxdata_sg_grade, cxdata_outer_diam || '*' || cxdata_wall_thickness, '在产品', null, curoporder_jg.WEIGHT, null, '热轧', curoporder_jg.high_tech_code, curoporder_jg.high_tech_name, curoporder_jg.high_prod_weight, curoporder_jg.high_mate_weight, curoporder_jg.estimated_unit_price, curoporder_jg.estimated_cost, curoporder_jg.acct_period, cxdata_material_code, curoporder_jg.resource_type, curoporder_jg.billet_code, '', '0', (case when cxdata_material_code like '%B' then '加工' when cxdata_material_code like '%C' then '热处理' else '' end), cxdata_material_name, curoporder_jg.orderid, curoporder_jg.judge_stove_no, null, SUBSTR(cxdata_material_name, INSTR(cxdata_material_name, ',', 1, 1) + 1, INSTR(cxdata_material_name, ',', 1, 2) - INSTR(cxdata_material_name, ',', 1, 1) - 1), sysdate); else -- 处理没有找到数据的情况 insert into HOT_PRODUCTION_MES_RZ (cx_no, contract_type, prod_variety, steel_level, steel_no, spec, prod_type, prod_weight, mate_weight, steel_waste, process, high_tech_code, high_tech_name, high_prod_weight, high_mate_weight, estimated_unit_price, estimated_cost, acct_period, mate_code, resource_type, billet_code, memo, flag, go_there, mate_name, orderid,judge_stove_no) values (seq_mes_cx.nextval, curoporder_jg.contract_type, null, null, null, null, '在产品', null, curoporder_jg.WEIGHT, null, '热轧', curoporder_jg.high_tech_code, curoporder_jg.high_tech_name, curoporder_jg.high_prod_weight, curoporder_jg.high_mate_weight, curoporder_jg.estimated_unit_price, curoporder_jg.estimated_cost, curoporder_jg.acct_period, null, curoporder_jg.resource_type, curoporder_jg.billet_code, '', '0', null, null, curoporder_jg.orderid, curoporder_jg.judge_stove_no); end if; end if; exception when value_error then -- 处理值错误 -- 记录错误信息,但继续处理下一条记录 dbms_output.put_line('数据截断错误 for orderid: ' || curoporder_jg.orderid); continue; when others then -- 处理其他异常 dbms_output.put_line('其他错误 for orderid: ' || curoporder_jg.orderid || ' - ' || sqlerrm); continue; end; end loop; close oporder_cursor_jg; commit; end mes_cx_rz_zzpnew_hand;