# mes_cx_rz_zxnew_hand 存储过程(什么什么热轧) ## 模板下载 [模板](./mes_cx_rz_zxnew_hand.sql) 用{0}表达 当前月份 替换成02 用{1}表达 下个月份 替换成03 用{2}表达 下个月份 替换成01 ## 原始脚本内容 ```sql CREATE OR REPLACE procedure MES_CX_RZ_ZXNEW_HAND is a number(4); b varchar(200); cxdata orderdetail_v@th_cx_link%rowtype; prod_name_cx varchar(200); sg_grade_cx varchar(200); sg_sign_cx varchar(200); wall_thickness_cx varchar(200); material_code_cx varchar(200); MATERIAL_NAME_cx varchar(200); outer_diam_cx varchar(200); --热轧 CURSOR OPOrder_Cursor_rz IS /* select CONTRACT_TYPE,--合同类型 PROD_VARIETY,--品名、品种 STEEL_LEVEL,--钢级 STEEL_NO,--钢号 SPEC,--规格 PROD_TYPE,--产量类型 sum(PROD_WEIGHT) PROD_WEIGHT,--成品重量 sum(MATE_WEIGHT) MATE_WEIGHT,--来料重量 (case when sum(MATE_WEIGHT) <>0 then round(sum(PROD_WEIGHT)/sum(MATE_WEIGHT),4)*100 else 0 end) STEEL_WASTE,--消耗占比 '热轧' PROCESS,--工序 null HIGH_TECH_CODE, null HIGH_TECH_NAME, 0 HIGH_PROD_WEIGHT, 0 HIGH_MATE_WEIGHT, 0 ESTIMATED_UNIT_PRICE, 0 ESTIMATED_COST, substr(BAL_YEAR_MONTH,0,4)||'-'||substr(BAL_YEAR_MONTH,5,2) ACCT_PERIOD, MATE_CODE || xx MATE_CODE,--物料编码 RESOURCE_TYPE RESOURCE_TYPE,--是否来料加工 BILLET_CODE BILLET_CODE --钢坯编码 from ( select t.*,GET_CP_CODE2(STEEL_NO, --钢种 STEEL_LEVEL, --钢级 jhzt, --交货状态 PROD_VARIETY, --品名 MODEL_DESC, --端部 jg, ACT_DIMATER, -- 外径 ACT_HEIGHT) MATE_CODE,--壁厚 GET_PL_CODE(STEEL_NO, --钢种 (select xxx.dimater from cxuser.ydm_gp_outlist xxx where xxx.stove_no = ( select stove_no from cxuser.PLN_ZY_ZG_M where stove_no = t.stove_no and ROWNUM =1) and ROWNUM =1)--规格 ) BILLET_CODE from ( select t.judge_stove_no, --T.JUGDE_APPLY_CODE, t.lot_no, t.pro_order_no, t.ACT_DIMATER, t.ACT_HEIGHT, t.stove_no,--tzh (case when t.Judge_Stove_No like 'W%' then '是' else '否' end) RESOURCE_TYPE, (CASE WHEN t.pro_order_no IS NULL THEN (SELECT DECODE(MAX(S.ORDER_TYP), '120108', '双经销', '120109', '定销订购', '120107', '来料加工', '自用') FROM cxuser.SLM_ORDER_HEAD S WHERE S.ORDER_NO = REGEXP_REPLACE(T1.CONTRACT_NO, '/.*', '')) ELSE (SELECT DECODE(MAX(S.ORDER_TYP), '120108', '双经销', '120109', '定销订购', '120107', '来料加工', '自用') FROM cxuser.SLM_ORDER_HEAD S WHERE S.ORDER_NO = REGEXP_REPLACE(T.PRO_ORDER_NO, '/.*', '')) END) CONTRACT_TYPE,--合同类型 --是否双经销, (SELECT (case when INSTR(a.whole_backlog,'D-F-G')>0 then 'C' when INSTR(a.whole_backlog,'D-G')>0 then 'C' when INSTR(a.whole_backlog,'D-F')>0 then 'B' ELSE 'A' END ) XX FROM cxuser.CRAFT_ORD_DESIGN_MSC_PL A WHERE A.ORD_LN_PK = (select ORD_LN_PK from cxuser.slm_order_line b where b.ord_pk = (select ord_pk from cxuser.slm_order_head xx where xx.order_no = REGEXP_REPLACE(T.PRO_ORDER_NO, '/.*', '') and rownum =1 and xx.validflag =1) and b.order_seq= SUBSTR(T.PRO_ORDER_NO, LENGTH(T.PRO_ORDER_NO)-2) and b.validflag =1 ) and rownum =1) xx, --下线状态 t.pline_code, t.pline_name, t.producname PROD_VARIETY,--品名、品种 t.steelname STEEL_LEVEL,--钢级 t.GRADENAME STEEL_NO,--钢号 t.spec_name SPEC,--规格 t.model_desc, t.std_name, T.STD_STYLE_DESC 标准类别, (case when T.TARGET ='A' THEN '产成品' else '半成品' end) PROD_TYPE,--产量类型 MAX(T2.MEMO) MEMO, MAX(t1.target) 原去向, MAX(T1.DB_LENGTH) 单倍长, MAX(T1.SAW_NUM) 分切数, MAX(T1.PIPE_SECTION) 断面, MAX(T1.TUBE_TYPE) 管坯类型, MAX(T1.TUBE_SUORCE) 管坯来源, MAX(T1.FEED_TIME) FEED_TIME, TO_CHAR(DECODE(T.TARGET, 'A', MAX(T.JUDGE_TOLRESULT_TIME), MAX(t.JUDGE_RESULT_TIME)), 'YYYY-MM-DD') JUDGE_RESULT_TIME, SUM(DECODE(t.ACT_WEIGHT, NULL, t.ACT_THEORY_WEIGHT, t.ACT_WEIGHT)) PROD_WEIGHT,--成品重量--HGD, SUM(T.ACT_COUNT) 合格支, sum(t.INPUT_WEIGHT) INPUT_WEIGHT, sum(t.OUTPUT_WEIGHT) MATE_WEIGHT, --来料重量--OUTPUT_WEIGHT T.BAL_YEAR_MONTH, GET_DELIVERY_STATE2((select max(y.desgin_key) from cxuser.craft_ord_design_msc_pl y where y.desgin_key in (select x.desgin_key from cxuser.craft_ord_design_msc x where x.ord_ln_pk in (select b.ord_ln_pk from cxuser.slm_order_line b where b.ord_pk in (select a.ord_pk from cxuser.slm_order_head a where a.order_no = substr(t.pro_order_no,1,instr(t.pro_order_no,'/')-1)) and x.order_seq = substr(t.pro_order_no,instr(t.pro_order_no,'/')+1,3)))), (select max(y.msc_pline) from cxuser.craft_ord_design_msc_pl y where y.desgin_key in (select x.desgin_key from cxuser.craft_ord_design_msc x where x.ord_ln_pk in (select b.ord_ln_pk from cxuser.slm_order_line b where b.ord_pk in (select a.ord_pk from cxuser.slm_order_head a where a.order_no = substr(t.pro_order_no,1,instr(t.pro_order_no,'/')-1)) and x.order_seq = substr(t.pro_order_no,instr(t.pro_order_no,'/')+1,3))))) jhzt, (select max(y.value_text) from cxuser.craft_ord_design_std_gic y where y.desgin_key in (select x.desgin_key from cxuser.craft_ord_design_msc x where x.ord_ln_pk in (select b.ord_ln_pk from cxuser.slm_order_line b where b.ord_pk in (select a.ord_pk from cxuser.slm_order_head a where a.order_no = substr(t.pro_order_no,1,instr(t.pro_order_no,'/')-1)) and x.order_seq = substr(t.pro_order_no,instr(t.pro_order_no,'/')+1,3))) AND SPECL_FL = '2') jg from cxuser.QCM_ZG_JUGDE_APPLY t LEFT JOIN cxuser.MIL_PLAN T1 ON T.JUDGE_STOVE_NO = REGEXP_REPLACE(T1.JUDGE_STOVE_NO, '-.*', '') AND T1.BACK_SLAB_FLAG <> '2' AND SUBSTR(T1.JUDGE_STOVE_NO, -2) = '01' LEFT JOIN cxuser.PLN_ZY_ZG_M T2 ON T2.HEAT_PLAN_NO = T.HEAT_PLAN_NO where T.IS_FLAG = '0' AND T.IS_ALL_SCRAP IN ('0', '1', '2', '7', '8') AND ((T.VALIDFLAG = '20' AND T.TARGET <> 'A' AND T.JUDGE_RESULT_CODE IN ('40740701', '40740705', '40740709')) OR (T.VALIDFLAG = '20' AND T.TARGET = 'A' AND T.JUDGE_TOLRESULT_CODE IN ('40740701', '40740705', '40740709')) OR (T.VALIDFLAG = '20' AND T.TARGET = 'A' AND T.IS_ALL_SCRAP = '1') OR T.INSTANCY_FLAG = '1') AND T.PROCESS_CODE = 'D' and t.JUDGE_TOLRESULT_CODE <> '40740705' --tzh --AND T.BAL_YEAR_MONTH = to_char(sysdate,'yyyymm') -- AND substr(T.BAL_YEAR_MONTH,0,4) ='2024' AND T.BAL_YEAR_MONTH = '202411' AND T.PLINE_CODE = 'C072' group by t.judge_stove_no, T1.JUDGE_STOVE_NO, T1.PRO_PLAN_ID, t.lot_no, t.pro_order_no, T1.CONTRACT_NO, t.pline_code, t.pline_name, t.producname, t.steelname, t.GRADENAME, t.spec_name, T.STD_STYLE_DESC, t.model_desc, T.TARGET, t.std_name, T.BAL_YEAR_MONTH, t.ACT_DIMATER, t.stove_no,--tzh t.ACT_HEIGHT order by T.PLINE_CODE, t.judge_stove_no ) t ) group by CONTRACT_TYPE,--合同类型 PROD_VARIETY,--品名、品种 STEEL_LEVEL,--钢级 STEEL_NO,--钢号 SPEC,--规格 PROD_TYPE,--产量类型 BAL_YEAR_MONTH, MATE_CODE, BILLET_CODE, RESOURCE_TYPE, xx;*/ /* select (SELECT DECODE(MAX(S.ORDER_TYP), '120108', '双经销', '120109', '定销订购', '120107', '来料加工', '自用') FROM cxuser.SLM_ORDER_HEAD S WHERE S.ORDER_NO = REGEXP_REPLACE(T.PRO_ORDER_NO, '/.*', '')) CONTRACT_TYPE,--合同类型 t.producname PROD_VARIETY,--品名、品种 t.steelname STEEL_LEVEL,--钢级 t.GRADENAME STEEL_NO,--钢号 t.spec_name SPEC,--规格 (case when T.TARGET ='A' THEN '产成品' else '半成品' end) PROD_TYPE,--产量类型 SUM(DECODE(t.ACT_WEIGHT, NULL, t.ACT_THEORY_WEIGHT, t.ACT_WEIGHT)) PROD_WEIGHT,--成品重量 SUM(INPUT_WEIGHT) MATE_WEIGHT,--来料重量 (case when sum(INPUT_WEIGHT) <>0 then round(SUM(DECODE(t.ACT_WEIGHT, NULL, t.ACT_THEORY_WEIGHT, t.ACT_WEIGHT))/SUM(INPUT_WEIGHT),4)*100 else 0 end) STEEL_WASTE,--消耗占比 '热轧' PROCESS,--工序 null HIGH_TECH_CODE, null HIGH_TECH_NAME, 0 HIGH_PROD_WEIGHT, 0 HIGH_MATE_WEIGHT, 0 ESTIMATED_UNIT_PRICE, 0 ESTIMATED_COST, substr(BAL_YEAR_MONTH,0,4)||'-'||substr(BAL_YEAR_MONTH,5,2) ACCT_PERIOD, --GET_CP_CODE4(t.pro_order_no) MATE_CODE,--物料编码 --换成取产销提供的视图 tzh 24.12.4 GET_CP_CODE6(t.pro_order_no) MATE_CODE,--物料编码 (case when t.Judge_Stove_No like 'W%' then '是' else '否' end) RESOURCE_TYPE,--是否来料加工 --GET_PL_CODE(GRADENAME,ACT_dimater) BILLET_CODE --钢坯编码, GET_PL_CODE(GRADENAME,(select xxx.dimater from cxuser.ydm_gp_outlist xxx where xxx.stove_no =t.stove_no and ROWNUM =1)--规格 ) BILLET_CODE --,stove_no,t.pro_order_no--钢坯编码, from cxuser.QCM_ZG_JUGDE_APPLY t LEFT JOIN MIL_PLAN T1 ON T.JUDGE_STOVE_NO = REGEXP_REPLACE(T1.JUDGE_STOVE_NO, '-.*', '') AND T1.BACK_SLAB_FLAG <> '2' AND SUBSTR(T1.JUDGE_STOVE_NO, -2) = '01' LEFT JOIN PLN_ZY_ZG_M T2 ON T2.HEAT_PLAN_NO = T.HEAT_PLAN_NO where T.IS_FLAG = '0' AND T.IS_ALL_SCRAP IN ('0', '1', '2', '7', '8') AND ((T.VALIDFLAG = '20' AND T.TARGET <> 'A' AND T.JUDGE_RESULT_CODE IN ('40740701', '40740705', '40740709')) OR (T.VALIDFLAG = '20' AND T.TARGET = 'A' AND T.JUDGE_TOLRESULT_CODE IN ('40740701', '40740705', '40740709')) OR (T.VALIDFLAG = '20' AND T.TARGET = 'A' AND T.IS_ALL_SCRAP = '1') OR T.INSTANCY_FLAG = '1') AND T.PROCESS_CODE = 'D' AND T.PLINE_CODE = 'C072' AND (T.TARGET = t1.target OR T.JUDGE_STOVE_NO <> 'F24070002' OR T.JUDGE_STOVE_NO <> 'F24070006') \*where T.IS_FLAG = '0' AND T.IS_ALL_SCRAP IN ('0', '1', '2', '7', '8') AND ((T.VALIDFLAG = '20' AND T.TARGET <> 'A' AND T.JUDGE_RESULT_CODE IN ('40740701', '40740705', '40740709')) OR (T.VALIDFLAG = '20' AND T.TARGET = 'A' AND T.JUDGE_TOLRESULT_CODE IN ('40740701', '40740705', '40740709')) OR (T.VALIDFLAG = '20' AND T.TARGET = 'A' AND T.IS_ALL_SCRAP = '1') OR T.INSTANCY_FLAG = '1') AND T.PROCESS_CODE = 'D' AND T.PLINE_CODE = 'C072'*\ AND T.BAL_YEAR_MONTH = '202411' group by t.producname,t.steelname,--钢级 t.GRADENAME,--钢号 stove_no, t.spec_name,--规格 T.TARGET,T.BAL_YEAR_MONTH,pro_order_no,T.Judge_Stove_No;*/ select (select decode(max(s.order_typ), '120108', '双经销', '120109', '定销订购', '120107', '来料加工', '自用') from cxuser.slm_order_head s where s.order_no = regexp_replace(t.pro_order_no, '/.*', '')) contract_type, --合同类型 t.producname prod_variety, nvl(replace(PRO_ORDER_NO, '/', ''), replace(get_cp_order(t.judge_stove_no), '/', '')) orderid, --品名、品种 t.steelname steel_level, --钢级 t.gradename steel_no, --钢号 t.spec_name spec, --规格 (case when t.target = 'A' then '产成品' else '半成品' end) prod_type, --产量类型 (case when t.target = 'A' then (sum(decode(t.act_weight, null, t.act_theory_weight, t.act_weight)) + nvl((select SUM(nvl(T2.act_weight, 0)) from ydm_zc_stocktakinglist t2 where t2.judge_stove_no = t.judge_stove_no and t2.STOCKTAKING_TYPE_CODE = '800603' and t2.BAL_YEAR_MONTH = '202602'), 0)) else sum(decode(t.act_weight, null, t.act_theory_weight, t.act_weight)) end) prod_weight, --成品重量 nvl((select SUM(nvl(T2.act_weight, 0)) from ydm_zc_stocktakinglist t2 where t2.judge_stove_no = t.judge_stove_no and t2.STOCKTAKING_TYPE_CODE = '800603' and t2.BAL_YEAR_MONTH = '202602'), 0) lc_weight, --量差 sum(output_weight) mate_weight, --来料重量 (case when sum(input_weight) <> 0 then round(sum(decode(t.act_weight, null, t.act_theory_weight, t.act_weight)) / sum(input_weight), 4) * 100 else 0 end) steel_waste, --消耗占比 '热轧' process, --工序 null high_tech_code, null high_tech_name, 0 high_prod_weight, 0 high_mate_weight, 0 estimated_unit_price, 0 estimated_cost, substr(t.bal_year_month, 0, 4) || '-' || substr(t.bal_year_month, 5, 2) acct_period, --GET_CP_CODE4(t.pro_order_no) MATE_CODE,--物料编码 --换成取产销提供的视图 tzh 24.12.4 get_cp_code6(t.pro_order_no) mate_code, --物料编码 getislljg(t.judge_stove_no, replace(t.PRO_ORDER_NO, '/', '')) resource_type, t.judge_stove_no, --是否来料加工 --GET_PL_CODE(GRADENAME,ACT_dimater) BILLET_CODE --钢坯编码, get_pl_code(t.gradename, (select xxx.dimater from cxuser.ydm_gp_outlist xxx where xxx.stove_no = CASE WHEN t.stove_no IS NOT NULL THEN t.stove_no ELSE get_max_stove_no(t.judge_stove_no) END and rownum = 1) --规格 ) billet_code --,stove_no,t.pro_order_no--钢坯编码, from cxuser.qcm_zg_jugde_apply t left join mil_plan t1 on t.judge_stove_no = regexp_replace(t1.judge_stove_no, '-.*', '') and t1.back_slab_flag <> '2' and substr(t1.judge_stove_no, -2) = '01' left join pln_zy_zg_m t2 on t2.heat_plan_no = t.heat_plan_no where t.is_flag = '0' and t.is_all_scrap in ('0', '1', '2', '7', '8') and ((t.validflag = '20' and t.target <> 'A' and t.judge_result_code in ('40740701', '40740709')) or (t.validflag = '20' and t.target = 'A' and t.judge_tolresult_code in ('40740701', '40740709')) or (t.validflag = '20' and t.target = 'A' and t.is_all_scrap = '1') or t.instancy_flag = '1') and t.process_code = 'D' -- AND T.PLINE_CODE = 'C072' and t.target = t1.target /*where T.IS_FLAG = '0' AND T.IS_ALL_SCRAP IN ('0', '1', '2', '7', '8') AND ((T.VALIDFLAG = '20' AND T.TARGET <> 'A' AND T.JUDGE_RESULT_CODE IN ('40740701', '40740705', '40740709')) OR (T.VALIDFLAG = '20' AND T.TARGET = 'A' AND T.JUDGE_TOLRESULT_CODE IN ('40740701', '40740705', '40740709')) OR (T.VALIDFLAG = '20' AND T.TARGET = 'A' AND T.IS_ALL_SCRAP = '1') OR T.INSTANCY_FLAG = '1') AND T.PROCESS_CODE = 'D' AND T.PLINE_CODE = 'C072'*/ and t.bal_year_month in ('202602') --and t.judge_stove_no in( 'A25030144','C26020468','C26020470','C26020471') and nvl(replace(PRO_ORDER_NO, '/', ''), replace(get_cp_order(t.judge_stove_no), '/', '')) not like 'ZZBY%' --AND t.judge_stove_no not LIKE 'F%' --AND t.judge_stove_no in('X25080001','X25080002','X25080003','X25080004','X25080005') group by t.producname, t.steelname, --钢级 t.gradename, --钢号 t.stove_no, t.spec_name, --规格 t.target, t.bal_year_month, pro_order_no, t.judge_stove_no; curoporder_jg oporder_cursor_rz%rowtype; cnt number; begin cnt := 0; open oporder_cursor_rz; loop fetch oporder_cursor_rz into curoporder_jg; exit when oporder_cursor_rz%notfound; 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 outer_diam, prod_name, sg_grade, sg_sign, wall_thickness, material_code, MATERIAL_NAME into outer_diam_cx, prod_name_cx, sg_grade_cx, sg_sign_cx, wall_thickness_cx, material_code_cx, MATERIAL_NAME_cx 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 outer_diam, prod_name, sg_grade, sg_sign, wall_thickness, material_code, MATERIAL_NAME into outer_diam_cx, prod_name_cx, sg_grade_cx, sg_sign_cx, wall_thickness_cx, material_code_cx, MATERIAL_NAME_cx 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 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, lc_weight) values (seq_mes_cx.nextval, curoporder_jg.contract_type, prod_name_cx, sg_sign_cx, sg_grade_cx, outer_diam_cx || '*' || wall_thickness_cx, curoporder_jg.prod_type, curoporder_jg.prod_weight, curoporder_jg.mate_weight, curoporder_jg.steel_waste, curoporder_jg.process, 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, material_code_cx, curoporder_jg.resource_type, curoporder_jg.billet_code, '', '0', (case when curoporder_jg.mate_code like '%B' then '加工' when curoporder_jg.mate_code like '%C' then '热处理' else '' end), MATERIAL_NAME_cx, curoporder_jg.orderid, curoporder_jg.judge_stove_no, null, SUBSTR(MATERIAL_NAME_cx, INSTR(MATERIAL_NAME_cx, ',', 1, 1) + 1, INSTR(MATERIAL_NAME_cx, ',', 1, 2) - INSTR(MATERIAL_NAME_cx, ',', 1, 1) - 1), sysdate, curoporder_jg.lc_weight); 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, lc_weight) values (seq_mes_cx.nextval, curoporder_jg.contract_type, curoporder_jg.prod_variety, curoporder_jg.steel_level, curoporder_jg.steel_no, curoporder_jg.spec, curoporder_jg.prod_type, curoporder_jg.prod_weight, curoporder_jg.mate_weight, curoporder_jg.steel_waste, curoporder_jg.process, 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, curoporder_jg.mate_code, curoporder_jg.resource_type, curoporder_jg.billet_code, '', '0', (case when curoporder_jg.mate_code like '%B' then '加工' when curoporder_jg.mate_code like '%C' then '热处理' else '' end), null, curoporder_jg.orderid, curoporder_jg.judge_stove_no, curoporder_jg.lc_weight); end if; cnt := cnt + 1; if cnt = 6 then cnt := 100; end if; end loop; close oporder_cursor_rz; commit; exception when others then DBMS_OUTPUT.PUT_LINE('错误: ' || cnt || '条' || SQLERRM); end mes_cx_rz_zxnew_HAND; ```