|
SAP-R3展开多阶BOM原码(ORACLE)
create or replace
PROCEDURE ZS_BOMLIST
( MATNR_IN IN VARCHAR2,
WERKS_IN IN VARCHAR2,
STLAN_IN in varchar2,
STLNR_IN IN VARCHAR2,
STLAL_IN IN VARCHAR2,
ref_cursor OUT sys_refcursor /* 这个sys_refcursor类型在SYS.STANDARD包中 */
)
is
STR varchar2(500);
i NUMBER;
y number;
begin
STR:='truncate TABLE ZT_BOMLIST_TMP';
execute immediate STR;
I:=1;
insert into ZT_BOMLIST_TMP(MATNR,WERKS,STLAN,STLNR,STLAL,STLTY,STKOZ,BMEIN,BMENG,STLKN,DATUV,ANDAT,ANNAM,AEDAT,AENAM,IDNRK,BISMT,MAKTX,POSTP,POSNR,MEINS,MENGE,AUSCH,POTX1,POTX2,ALPGR,ALPRF,EWAHR,SANKA,JC,MATNR_MJ)
select MATNR,WERKS,STLAN,STLNR,STLAL,STLTY,STKOZ,BMEIN,BMENG,STLKN,DATUV,ANDAT,ANNAM,AEDAT,AENAM,IDNRK,BISMT,MAKTX,POSTP,POSNR,MEINS,MENGE,AUSCH,POTX1,POTX2,ALPGR,ALPRF,EWAHR,SANKA,I as JC,MATNR_IN
from ZV_BOMLIST
where MATNR=MATNR_IN and WERKS=WERKS_IN and STLAN=STLAN_IN;
LOOP
I:=I+1;
insert into ZT_BOMLIST_TMP(MATNR,WERKS,STLAN,STLNR,STLAL,STLTY,STKOZ,BMEIN,BMENG,STLKN,DATUV,ANDAT,ANNAM,AEDAT,AENAM,IDNRK,BISMT,MAKTX,POSTP,POSNR,MEINS,MENGE,AUSCH,POTX1,POTX2,ALPGR,ALPRF,EWAHR,SANKA,JC,MATNR_MJ)
SELECT A.MATNR,A.WERKS,A.STLAN,A.STLNR,A.STLAL,A.STLTY,A.STKOZ,A.BMEIN,A.BMENG,A.STLKN,A.DATUV,A.ANDAT,A.ANNAM,A.AEDAT,
a.AENAM,a.IDNRK,a.BISMT,a.MAKTX,a.POSTP,a.POSNR,a.MEINS,a.MENGE AS MENGE,a.AUSCH,a.POTX1,a.POTX2,a.ALPGR,a.ALPRF,a.EWAHR,a.SANKA,I as JC,a.MATNR
from ZV_BOMLIST a inner join ZT_BOMLIST_TMP b on a.MATNR=b.IDNRK and a.WERKS=b.WERKS and a.STLAN=b.STLAN and JC=(I-1);
-- and STLNR=STLNR_IN and STLAL=STLAL_IN
SELECT count(*) INTO y FROM ZT_BOMLIST_TMP WHERE JC=I;
if Y=0 or I>9 then
EXIT;
end if;
end LOOP;
open REF_CURSOR for
SELECT * FROM ZT_BOMLIST_TMP order by JC,POSNR;
END ZS_BOMLIST; |
|