一、新增4张表OK
IN_BOM_CHANGE、IN_STOCK_CUSTOMER、IN_ORDER_PLANNING、IN_STOCK_LOCATION
CREATE TABLE STG.IN_BOM_CHANGE ( SO_ID VARCHAR2(20 BYTE), SO_LINE_ID VARCHAR2(10 BYTE), LOC_ID VARCHAR2(5 BYTE), PARENT_ITEM_ID VARCHAR2(30 BYTE), BOM_ID VARCHAR2(50 BYTE), OLD_ITEM_ID VARCHAR2(30 BYTE), OLD_QUANTITY NUMBER, NEW_ITEM_ID VARCHAR2(30 BYTE), NEW_QUANTITY NUMBER, ACTION VARCHAR2(10 BYTE), PERIOD_DATE DATE ) TABLESPACE STGDATA; CREATE BITMAP INDEX STG.IDX_IN_BOM_CHANGE_DBA01 ON STG.IN_BOM_CHANGE (ACTION) NOLOGGING TABLESPACE STGDATA PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT ) PARALLEL ( DEGREE 4 INSTANCES 1 ); CREATE TABLE STG.IN_STOCK_CUSTOMER ( CUSTOMER_ID VARCHAR2(90 BYTE) NOT NULL, NAME_ID VARCHAR2(90 BYTE) NOT NULL, ID NUMBER(10) NOT NULL, LOCATION_ID VARCHAR2(10 BYTE) ) TABLESPACE STGDATA; CREATE TABLE STG.IN_ORDER_PLANNING ( SO_ID VARCHAR2(40 CHAR), SO_LINE_ID VARCHAR2(40 CHAR), FG_ITEM_ID VARCHAR2(40 CHAR), SEMI_ITEM_ID VARCHAR2(40 CHAR), ORDER_PLANNING INTEGER, CUSTOMER_ID VARCHAR2(40 CHAR), VIP INTEGER, WERKS VARCHAR2(10 CHAR), ZREMARK1 VARCHAR2(50 CHAR), ZREMARK2 VARCHAR2(50 CHAR) ) TABLESPACE STGDATA; CREATE TABLE STG.IN_STOCK_LOCATION ( LOCATION_NAME VARCHAR2(20 BYTE), LOCATION_ID VARCHAR2(10 BYTE), WERKS VARCHAR2(5 BYTE) ) TABLESPACE STGDATA;
二、新建索引OK
ALTER TABLE ABPPMGR.MST_ITEMBOMROUTING MODIFY BOMID VARCHAR2(100 BYTE); ALTER TABLE ABPPMGR.MST_ITEMBOMROUTING_P MODIFY BOMID VARCHAR2(100 BYTE); ALTER TABLE ABPPMGR.SALESORDERLINE_P MODIFY ATTRIBUTECLASS VARCHAR2(80 BYTE); ALTER TABLE ABPPMGR.MST_BOMCOMPONENTS MODIFY BOMID VARCHAR2(100 BYTE); create index ABPPMGR.idx_MST_BOMCOMPONENTS_DBA01 on ABPPMGR.MST_BOMCOMPONENTS(BOMID); ALTER TABLE ABPPMGR.MST_BOMCOMPONENTS_P MODIFY BOMID VARCHAR2(100 BYTE); ALTER TABLE ABPPMGR.MST_BOMCOMPONENTSALT MODIFY BOMID VARCHAR2(100 BYTE); ALTER TABLE ABPPMGR.MST_BOMCOMPONENTSALT_P MODIFY BOMID VARCHAR2(100 BYTE); ALTER TABLE ABPPMGR.MST_BOMHEADER MODIFY BOMID VARCHAR2(100 BYTE); create bitmap index idx_MST_BOMCOMPONENTS_dba02 on ABPPMGR.MST_BOMCOMPONENTS(SYS_CREATED_BY); ALTER TABLE ABPPMGR.PRODUCTIONORDERS_P MODIFY ATTRIBUTECLASS VARCHAR2(80 BYTE); --ADD ON 20180607 ALTER TABLE ABPPMGR.PRODUCTIONORDERS MODIFY BOMID VARCHAR2(100 BYTE); ALTER TABLE ABPPMGR.SFCHEADER MODIFY BOMID VARCHAR2(100 BYTE); ALTER TABLE ABPPMGR.INVENTORYPROPERTY MODIFY ATTRIBUTECLASS VARCHAR2(80 BYTE); ALTER TABLE ABPPMGR.INVENTORY MODIFY LOTLEVEL1 VARCHAR2(80 BYTE); --6.15号还原6.10的DB后,此加长字段取消 ALTER TABLE ABPPMGR.INVENTORYPROPERTY MODIFY LOCATIONID VARCHAR2(80 BYTE);--6.15号还原6.10的DB后,此加长字段取消
三、创建存储过程SAP_VIP_YANHUO OK
CREATE OR REPLACE PROCEDURE STG.SAP_VIP_YANHUO(EXITCODE OUT NUMBER) IS /*********************************************************************** ** 存储过程详细说明 ** 存储过程名称: SAP_VIP_YANHUO ** 存储过程创建日期: 2017/12/08 ** 存储过程创建人: LVXUEFEN ** 目的: ** 1.将ZFP037\ZFP026整合成到一张表IN_ORDER_PLANNING(数据来源SAP_037A\SAP_QM_CUSTOMER\SAP_QM_CUSTOMER_FAKE) ** 2.将ZFP027A和ZFP025a整合进一个表IN_BOM_CHANGE SAP_BOM_CHANGE_ALT-->IN_BOM_CHANGE SAP_SO_BOM-->IN_BOM_CHANGE ** 输入参数: ** 输出参数: EXITCODE: 0=Success/1=Failure ** 返回值: ** 用法: ** IN_ORDER_PLANNING表中的ORDER_PLANNING代表是否是真驗貨 1:表示為真驗貨 0:為假驗貨;VIP字段:1代表VIP,0非VIP ** IN_BOM_CHANGE 變更方式:VIP:VIP換標簽 NEW:新增 DEL:刪除 MODIFY:修改 *-\*+"P;9U7YTR+ 修订版本: ** 版本号 修订时间 修订人 描述 ** --------- ---------- ------------ ------------------------ ** 1.0 2017/12/08 lvxuefen 1. 新建存储过程. **********************************************************************/ ----------------------- 以下定义存储过程使用的变量--------------------------------- E_ErrMessage VARCHAR2 (3000); BEGIN EXITCODE := 0; EXECUTE IMMEDIATE 'TRUNCATE TABLE IN_ORDER_PLANNING'; ----一、1.查找VIP客户成品编码的下层半成品编码(有BOM) INSERT INTO IN_ORDER_PLANNING(SO_ID, SO_LINE_ID , FG_ITEM_ID , SEMI_ITEM_ID, ORDER_PLANNING , CUSTOMER_ID ,VIP,WERKS ) SELECT distinct ISO.SO_ID,ISO.SO_LINE_ID, VIP.CMATNR,DT.ITEM_ID,'',VIP.KUNNR,'1',ISO.SITEID from SAP_037A VIP, IN_BOM_DETAILS DT, IN_BOM_HEADER HD,IN_SALES_ORDER ISO WHERE VIP.CMATNR= HD.PRODUCT_ID AND DT.BOM_ID = HD.BOM_ID AND ISO.ITEM_ID=VIP.CMATNR AND ISO.CUSTOMER_ID=VIP.KUNNR AND HD.IS_VALID = '1'and VIP.WERKS= SUBSTR(HD.BOM_ID,instr(HD.BOM_ID,'_',1)+1 ,'4') --SUBSTR(HD.BOM_ID,10,4) AND DT.ITEM_ID LIKE '000000102%' ; COMMIT; --既是VIP又是真验货 MERGE INTO IN_ORDER_PLANNING IOP USING SAP_QM_CUSTOMER A ON (IOP.SEMI_ITEM_ID=A.MATNR AND IOP.CUSTOMER_ID=A.KUNNR) WHEN MATCHED THEN UPDATE SET IOP.ORDER_PLANNING='1' WHERE VIP=1; COMMIT; --既是VIP又是假验货 MERGE INTO IN_ORDER_PLANNING IOP USING SAP_QM_CUSTOMER_fake A ON (IOP.SEMI_ITEM_ID=A.MATNR AND IOP.CUSTOMER_ID=A.KUNNR) WHEN MATCHED THEN UPDATE SET IOP.ORDER_PLANNING='0' WHERE VIP=1; COMMIT; --真假验假UI表中没有维护,则VIP客户一定是假验货 UPDATE IN_ORDER_PLANNING SET ORDER_PLANNING='0' WHERE ORDER_PLANNING IS NULL; COMMIT; ---真验货 INSERT INTO IN_ORDER_PLANNING(SO_ID, SO_LINE_ID , FG_ITEM_ID , SEMI_ITEM_ID, ORDER_PLANNING , CUSTOMER_ID ,VIP,WERKS ) SELECT distinct ISO.SO_ID,ISO.SO_LINE_ID, HD.PRODUCT_ID,ZYH.MATNR,'1',ZYH.KUNNR,'',ISO.SITEID from SAP_QM_CUSTOMER ZYH, IN_BOM_DETAILS DT, IN_BOM_HEADER HD,IN_SALES_ORDER ISO WHERE ZYH.MATNR= DT.ITEM_ID AND DT.BOM_ID = HD.BOM_ID AND ISO.ITEM_ID=HD.PRODUCT_ID AND ISO.CUSTOMER_ID=ZYH.KUNNR AND HD.IS_VALID = '1' AND ISO.SO_ID || SO_LINE_ID NOT IN (SELECT SO_ID || SO_LINE_ID FROM IN_ORDER_PLANNING); COMMIT; ---假验货 INSERT INTO IN_ORDER_PLANNING(SO_ID, SO_LINE_ID , FG_ITEM_ID , SEMI_ITEM_ID, ORDER_PLANNING , CUSTOMER_ID ,VIP,WERKS ) SELECT distinct ISO.SO_ID,ISO.SO_LINE_ID, HD.PRODUCT_ID,ZYH.MATNR,'0',ZYH.KUNNR,'',ISO.SITEID from SAP_QM_CUSTOMER_fake ZYH, IN_BOM_DETAILS DT, IN_BOM_HEADER HD,IN_SALES_ORDER ISO WHERE ZYH.MATNR= DT.ITEM_ID AND DT.BOM_ID = HD.BOM_ID AND ISO.ITEM_ID=HD.PRODUCT_ID AND ISO.CUSTOMER_ID=ZYH.KUNNR AND HD.IS_VALID = '1' AND ISO.SO_ID || SO_LINE_ID NOT IN (SELECT SO_ID || SO_LINE_ID FROM IN_ORDER_PLANNING); COMMIT; --真假验假UI表中没有维护,则VIP客户一定是假验货 UPDATE IN_ORDER_PLANNING SET VIP='0' WHERE VIP IS NULL; COMMIT; /*--1.无BOM INSERT INTO IN_ORDER_PLANNING(MANDT, KUNNRV , CMATNR , BMATNR, MENGE , SIGEN , WERKS ,HASBOM) SELECT VIP.* ,'N' HASBOM FROM SAP_037A VIP WHERE NOT EXISTS(SELECT * FROM IN_ORDER_PLANNING A WHERE A.CMATNR=VIP.CMATNR AND VIP.WERKS=A.WERKS ); --and VIP.CMATNR='000000101002001847' ; COMMIT; --2.将真验货表数据与IN_ORDER_PLANNING关联,匹配成功的数据标识为1,用于后面将IN_ORDER_PLANNING表的MATNR更新为空 MERGE INTO IN_ORDER_PLANNING VIP USING SAP_QM_CUSTOMER A ON (VIP.MATNR=A.MATNR AND VIP.KUNNRV=A.KUNNR) WHEN MATCHED THEN UPDATE SET VIP.ZFLAG2 = '1',VIP.KUNNR=A.KUNNR,VIP.ROW_ID=A.ROW_ID,VIP.ZFLAG=A.ZFLAG; COMMIT; update SAP_QM_CUSTOMER_FAKE set matnr='000000102001001122' where matnr='000000102002000563' and kunnr='R3540';--用于测试 ---2.将假验货表数据与IN_ORDER_PLANNING关联,匹配成功的数据标识为2,用于后面将IN_ORDER_PLANNING表的MATNR更新为空 MERGE INTO IN_ORDER_PLANNING VIP USING SAP_QM_CUSTOMER_FAKE A ON (VIP.MATNR=A.MATNR AND VIP.KUNNRV=A.KUNNR) WHEN MATCHED THEN UPDATE SET VIP.ZFLAG2 = '2' ,VIP.KUNNR=A.KUNNR,VIP.ROW_ID=A.ROW_ID; COMMIT; --3.将不符合条件 的半成品编码删除掉(ZFLAG2状态不为1的数据或者为空的数据) UPDATE IN_ORDER_PLANNING SET MATNR='' WHERE ZFLAG2 IS NULL; COMMIT; --4.将余下的真验货数据写入IN_ORDER_PLANNING表 INSERT INTO IN_ORDER_PLANNING(KUNNR,MATNR,ROW_ID,ZFLAG) SELECT A.* FROM SAP_QM_CUSTOMER A WHERE NOT EXISTS(SELECT * FROM IN_ORDER_PLANNING VIP WHERE VIP.MATNR=A.MATNR AND VIP.KUNNRV=A.KUNNR ); COMMIT; --4.将余下的假验货数据写入IN_ORDER_PLANNING表 INSERT INTO IN_ORDER_PLANNING(KUNNR,MATNR,ROW_ID) SELECT KUNNR,MATNR,ROW_ID FROM SAP_QM_CUSTOMER_FAKE A WHERE NOT EXISTS(SELECT * FROM IN_ORDER_PLANNING VIP WHERE VIP.MATNR=A.MATNR AND VIP.KUNNRV=A.KUNNR ); COMMIT; */ -------二、将ZFP027A和ZFP025a整合进一个表IN_BOM_CHANGE --TRUNCATE IN_BOM_CHANGE EXECUTE IMMEDIATE 'TRUNCATE TABLE IN_BOM_CHANGE'; --INSERT THE DATA INSERT INTO IN_BOM_CHANGE( SO_ID ,SO_LINE_ID ,LOC_ID ,PARENT_ITEM_ID ,BOM_ID ,OLD_ITEM_ID --,OLD_QUANTITY ,NEW_ITEM_ID --,NEW_QUANTITY ,PERIOD_DATE ,ACTION ) SELECT DISTINCT ISO.SO_ID ,ISO.SO_LINE_ID ,ST.WERKS ,ST.PMATNR ,ISO.BOMID ,ST.IDNRK ,ST.CMATNR ,ST.DATUB ,'MODIFY' FROM SAP_BOM_CHANGE_ALT ST JOIN IN_SALES_ORDER ISO ON ST.PMATNR=ISO.ITEM_ID UNION --半成品编码,先用半成品编码在BOM中找出对应所有成品编码,再用成品编码去找所有对应未清SO明细 SELECT DISTINCT ISO.SO_ID ,ISO.SO_LINE_ID ,ST.WERKS ,ST.PMATNR ,IH.BOM_ID ,ST.IDNRK ,ST.CMATNR ,ST.DATUB ,'MODIFY' FROM SAP_BOM_CHANGE_ALT ST JOIN IN_BOM_HEADER IH ON ST.PMATNR=IH.PRODUCT_ID JOIN IN_BOM_DETAILS IB ON IB.ITEM_ID=ST.PMATNR JOIN IN_BOM_HEADER IR ON IB.BOM_ID=IR.BOM_ID JOIN IN_SALES_ORDER ISO ON IR.PRODUCT_ID=ISO.ITEM_ID WHERE SUBSTR(LTRIM(ST.PMATNR,0),1,3) NOT IN('101','401') UNION --直接取SAP_SO_BOM表数据,有效期按照最早的soid交期 SELECT ISO.SO_ID ,ISO.SO_LINE_ID ,SB.SITE_ID ,SB.PITEM ,ISO.BOMID ,SB.CITEM ,SB.N_CITEM ,MIN(NVL(ISO.UDF_PROMD,ISO.UDF_CRSD))PERIODDATE ,'MODIFY' FROM SAP_SO_BOM SB JOIN IN_SALES_ORDER ISO ON SB.SO_ID=ISO.SO_ID AND LTRIM(SB.SO_LINE_ID,0)=SUBSTR(ISO.SO_LINE_ID,1,INSTR(ISO.SO_LINE_ID,'_')-1) GROUP BY ISO.SO_ID ,ISO.SO_LINE_ID ,SB.SITE_ID ,SB.PITEM ,SB.CITEM ,SB.N_CITEM ,ISO.BOMID ,'MODIFY'; COMMIT; --VIP标签的加减 成品对应的标识减 DEL 半成品对应的表示新增NEW INSERT INTO IN_BOM_CHANGE( SO_ID ,SO_LINE_ID ,LOC_ID ,PARENT_ITEM_ID ,BOM_ID ,OLD_ITEM_ID ,OLD_QUANTITY ,NEW_ITEM_ID ,NEW_QUANTITY ,PERIOD_DATE ,ACTION ) --成品减标签标识 DEL SELECT DISTINCT IP.SO_ID ,IP.SO_LINE_ID ,IP.WERKS ,IP.FG_ITEM_ID ,IH.BOM_ID ,SA.BMATNR OLD_ITEM_ID ,NULL NEW_QUANTITY ,NULL NEW_ITEM_ID ,NULL OLD_QUANTITY ,MIN(NVL(ISO.UDF_PROMD,ISO.UDF_CRSD))PERIODDATE ,'DEL' ACTION FROM IN_ORDER_PLANNING IP JOIN SAP_037A SA ON IP.FG_ITEM_ID=SA.CMATNR AND IP.WERKS=SA.WERKS JOIN IN_BOM_HEADER IH ON IP.FG_ITEM_ID=IH.PRODUCT_ID AND IP.WERKS=SUBSTR(IH.BOM_ID,INSTR(IH.BOM_ID,'_')+1,INSTR(IH.BOM_ID,'_',2,1)-5) JOIN IN_SALES_ORDER ISO ON IP.SO_ID=ISO.SO_ID AND IP.SO_LINE_ID=ISO.SO_LINE_ID WHERE IP.VIP=1 AND LENGTH(TRIM(BOM_ID))<=16 GROUP BY IP.SO_ID ,IP.SO_LINE_ID ,IP.WERKS ,IP.FG_ITEM_ID ,IH.BOM_ID ,SA.BMATNR ,NULL ,NULL ,NULL ,'DEL' UNION --半成品新增标签标识 NEW SELECT DISTINCT IP.SO_ID ,IP.SO_LINE_ID ,IP.WERKS ,IP.SEMI_ITEM_ID ,IH.BOM_ID ,NULL OLD_ITEM_ID ,NULL NEW_QUANTITY ,SA.BMATNR NEW_ITEM_ID ,NULL OLD_QUANTITY ,MIN(NVL(ISO.UDF_PROMD,ISO.UDF_CRSD))PERIODDATE ,'NEW' ACTION FROM IN_ORDER_PLANNING IP JOIN SAP_037A SA ON IP.FG_ITEM_ID=SA.CMATNR AND IP.WERKS=SA.WERKS JOIN IN_BOM_HEADER IH ON IP.SEMI_ITEM_ID=IH.PRODUCT_ID AND IP.WERKS=SUBSTR(IH.BOM_ID,INSTR(IH.BOM_ID,'_')+1,INSTR(IH.BOM_ID,'_',2,1)-5) JOIN IN_SALES_ORDER ISO ON IP.SO_ID=ISO.SO_ID AND IP.SO_LINE_ID=ISO.SO_LINE_ID WHERE IP.VIP=1 AND LENGTH(TRIM(BOM_ID))<=16 GROUP BY IP.SO_ID ,IP.SO_LINE_ID ,IP.WERKS ,IP.SEMI_ITEM_ID ,IH.BOM_ID ,SA.BMATNR ,NULL ,NULL ,NULL ,'NEW' ; COMMIT; --EXCEPTIONS EXCEPTION WHEN OTHERS THEN ROLLBACK; e_ErrMessage := SUBSTR (SQLERRM, 1, 1000) || SUBSTR (DBMS_UTILITY.FORMAT_ERROR_BACKTRACE, 1, 2000); PKG_UTIL.CREATELOG ('IN_ORDER_PLANNING', 'IN_ORDER_PLANNING', '1', 'INSERT', PKG_CONSTANT.CONS_MSG_EXCEPTION, e_ErrMessage, 'IN_ORDER_PLANNING'); EXITCODE := 1; END; /
四、SSIS导数
INSERT INTO IN_STOCK_LOCATION( WERKS,LOCATION_ID,LOCATION_NAME) SELECT WERKS,LGORT,LGOBE FROM ZTPP_FP_046@SAP_SEP; INSERT INTO IN_STOCK_CUSTOMER(CUSTOMER_ID, NAME_ID, ID, LOCATION_ID) SELECT KUNNR ,ZQUNZ ,ZINX ,LGORT FROM SAPSR3.ZTPP_FP_042@SAP_SEP
五、修改存储过程SAP_SO_BOM_OUTSOURCING_SEMI,去掉尾续
六、执行新存储过程SAP_VIP_YANHUO ,写入数据
七、去掉INVENTORY和IN_SEMI_ONHAND_LOCK表的尾续
ALTER TABLE IN_INVENTORY MODIFY EXT_FORTEXT1 VARCHAR2(10 BYTE); UPDATE IN_INVENTORY SET EXT_FORTEXT1=SUBSTR(ITEM_ID,19,2),ITEM_ID=SUBSTR(ITEM_ID,1,18) WHERE ITEM_ID LIKE '%C%'; COMMIT; UPDATE IN_SEMI_ONHAND_LOCKED SET ITEM_ID =SUBSTR(ITEM_ID,1,18) WHERE ITEM_ID LIKE '%C%'; COMMIT;
八、FP_BOM
九、fp