Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 6

CREATE OR REPLACE PROCEDURE TSTH_ABPP_OWNER.

UD_DM_LOAD_IN_PROD_MSTR
IS
/******************************************************************************
Copyright [ i2 Technologies ].
[ Procedure Notes ]
Name
: LOAD_IN_PROD_MSTR
Purpose : This PROCEDURE will load data INTO UD_DM_ITEMMASTER table.
The data will be in flat hierarchy AND will have DM related codes .
It will use the lookup table -- DM_SAP_PRODUCT_MAPPING table to get the DM speci
fic codes .
The source table will be --PROD_MSTR_STAGING which will have AS - IS data FROM
SAP .
Date
: 12/17/2007
Release : 1.2
---------------------------------------------------------------------------Version
Date
Author
Description
--------- ---------- --------------- -----------------------------------1.0
11/10/2007
Shubhajit
1. Basic framework
1.1
12/05/2007
Shubhajit
1. Fully functional.
1.2
12/17/2007
Shubhajit
1. CB/CTL and Special bars not to be
loaded INTO UD_dM_itemmaster table.
2.
Error logging mechanism added.
3.
04/12/2007
Manish
CB/CTL to filter is removed from the
procedure.
---------------------------------------------------------------------------Parameters : NONE
Input
: NONE
Notes
: NONE
******************************************************************************/
var_dm_prod_code
varchar2(20);
var_desc
varchar2(200);
var_dm_codes
UD_DM_SAP_PRODUCT_MAPPING%rowtype;
var_dm_sku_code
varchar2(30);
var_pi
varchar2(30);
var_pi_desc
varchar2(200);
var_mpi
varchar2(30);
var_grade_brand
varchar2(30);
var_length
varchar2(30);
var_pg_dia
varchar2(30);
var_grade
varchar2(30);
var_prod_sub_grp
varchar2(30);
var_product_grp
varchar2(30);
var_mpi_desc
varchar2(200);
var_prod_grp_desc
varchar2(200);
var_prod_sub_grp_desc varchar2(200);
var_length_desc
varchar2(200);
var_grade_desc
varchar2(200);
var_brand
varchar2(30);
BEGIN
execute immediate 'TRUNCATE TABLE UD_DM_ITEMMASTER ';
/** Commented AS many skus need to be filtered out AND not loaded INTO DM ***/
/** sku for product sub GROUP => SB AND CB are not to be loaded **/
/** cut to length sku for product GROUP Rebar AND SS will not be loaded **/
--FOR i in (select * from in_sap_products )
FOR i in (( SELECT a.SKUCODE skucode,a.PRODGRPDESC,a.PRODSUBGRPDESC,a.SIZEDESC,a
.LENGTHDESC,a.GRADEDESC,a.BRANDDESC,a.SKUDESC,b.pidesc
FROM in_sap_products a ,mst_sku_pi_map b WHERE a.skucode=b.skucode AND a.prodg
rpdesc is not null and
a.prodsubgrpdesc is not null and a.sizedesc is not null and a.lengthdesc is not
null and a.gradedesc is not null and

a.branddesc is not null and a.skudesc is not null )


minus
SELECT a.SKUCODE skucode ,a.PRODGRPDESC,a.PRODSUBGRPDESC,a.SIZEDESC,a.LENGTHDESC
,a.GRADEDESC,a.BRANDDESC,a.SKUDESC,b.pidesc FROM in_sap_products a ,mst_sku_pi_
map b
WHERE a.skucode=b.skucode and (prodsubgrpdesc in ('SB')))
/**OR (upper(prodgrpdesc) ='REBAR' AND pidesc like '%CL%')
OR (upper(prodgrpdesc) ='SS' AND pidesc like '%CL%')) -- changed by Manish **/
LOOP
BEGIN
/*** Gather data FROM the lookup table with respect to the sap sku code ***/
SELECT distinct a.*
INTO var_dm_codes
FROM UD_DM_SAP_PRODUCT_MAPPING a WHERE trim(a.sap_sku_code)=trim(i.SKUcode) ;
var_dm_sku_code := trim(var_dm_codes.dm_sku_code);
var_pi
:= trim(var_dm_codes.pi);
var_mpi
:= trim(var_dm_codes.mpi);
var_grade_brand := trim(var_dm_codes.grade_brand);
var_length
:= trim(var_dm_codes.length);
var_pg_dia
:= trim(var_dm_codes.pg_dia);
var_grade
:= trim(var_dm_codes.grade );
var_prod_sub_grp := trim(var_dm_codes.subgrp);
var_product_grp := trim(var_dm_codes.pg);
var_mpi_desc
:= trim(var_dm_codes.mpi_desc);
var_pi_desc
:= trim(var_dm_codes.pi_desc) ;
--dbms_output.put_line('**'||var_mpi_desc);
EXCEPTION when NO_DATA_FOUND then
/** make an entry in the mapping table and then go ahead**/
SELECT seq_sku_code.nextval INTO var_dm_sku_code
FROM dual;
--var_pi
:= seq_pi_code.nextval;
--var_pi_desc
:= ;
INSERT INTO UD_DM_SAP_PRODUCT_MAPPING
(sap_sku_code,sku_desc,dm_sku_code)
VALUES
(trim(i.skucode),trim(i.skudesc),trim(var_dm_sku_code));
COMMIT;
END;
BEGIN
/*** look in sku-pi mapping table AND retrieve the pi for the sku ***/
SELECT pidesc INTO var_pi_desc FROM mst_sku_pi_map
WHERE trim(skucode)=trim(i.skucode);
/*** Load data INTO the UD_DM_ITEMMASTER Table ***/
/*** If Code is not there in look up table then use the sequences to gene
rate code ***/
BEGIN
SELECT distinct pi INTO var_pi
FROM UD_DM_SAP_PRODUCT_MAPPING
WHERE trim(pi_desc) = trim(var_pi_desc);
EXCEPTION when no_data_found then
SELECT seq_pi_code.nextval INTO var_pi FROM dual ;
END;
BEGIN
SELECT distinct pg INTO var_product_grp
FROM UD_DM_SAP_PRODUCT_MAPPING
WHERE trim(pg_desc) = trim(i.prodgrpdesc);
EXCEPTION when no_data_found then
SELECT seq_pg_code.nextval INTO var_product_grp FROM dual ;
END;

BEGIN
SELECT distinct subgrp INTO var_prod_sub_grp
FROM UD_DM_SAP_PRODUCT_MAPPING
WHERE trim(subgrp_desc) = trim(i.prodsubgrpdesc);
EXCEPTION when no_data_found then
SELECT seq_subgrp_code.nextval INTO var_prod_sub_grp FROM dual;
END;
BEGIN
SELECT distinct pg_dia INTO var_pg_dia
FROM UD_DM_SAP_PRODUCT_MAPPING
WHERE trim(pg_dia_desc) = trim(i.prodgrpdesc||'_'||i.sizedesc) ;
EXCEPTION when no_data_found then
SELECT seq_pg_dia_code.nextval INTO var_pg_dia FROM dual;
END;
BEGIN
SELECT distinct grade_brand INTO var_grade_brand
FROM UD_DM_SAP_PRODUCT_MAPPING
WHERE trim(grade_brand_desc) = trim( i.gradedesc||'_'||i.branddesc);
EXCEPTION when no_data_found then
SELECT seq_grade_brand_code.nextval
INTO var_grade_brand FROM dual ;
END;
/***
if product is CB then put grade_desc AS CB||grade_desc
2) if sku has length then check if prod sub GROUP is rebar AND length is
dummy then
look for the mapping table of pg with length AND take it
if not found then put dummy
3) if brand is sisco then no need to mention in pi AND mpi desc other wise
need to mention
4) in REBAR pg BIC cannot adhere to the said logic
---otherwise psg||grade||size AND same for SB
5) if pg = wr,sp the just mpi=pi
6) sp same AS special wire rod
commodity wire rod = wr
7) doubt on size for small section product GROUP --- talk 2 sap
8) PI AND SKU there is one to one mapping :1:2
-- taking INTO accordance that it is not so .****/
/*** 1 Product SUB GROUP is CB then Grade Description is CB concatenated with g
rade description ***/
var_grade_desc:=i.gradedesc;
if trim(var_prod_grp_desc) = 'CB' then
var_grade_desc := 'CB'||i.gradedesc;
END if;
BEGIN
--SELECT distinct grade_desc INTO var_grade_desc
SELECT distinct grade INTO var_grade
FROM UD_DM_SAP_PRODUCT_MAPPING
WHERE trim(grade_desc) = trim(var_grade_desc);
EXCEPTION when no_data_found then
SELECT seq_grade_code.nextval INTO var_grade FROM dual;
END;
/*** 2 Match for length to the look up table AND get the value if no match fou
nd then put DUMMY ***/
BEGIN
SELECT distinct length_desc INTO var_length_desc FROM UD_DM_PRODSUBGRP_LENGTH_MA
P
WHERE trim(prod_sub_grp_desc)
=trim(i.prodsubgrpdesc)
AND trim(upper(length_desc))
=trim(upper(i.lengthdesc)) ;
var_length_desc:=trim(i.lengthdesc);

EXCEPTION when no_DATA_FOUND THEN


var_length_desc := 'Dummy';
END;
BEGIN
SELECT distinct length INTO var_length
FROM UD_DM_SAP_PRODUCT_MAPPING
WHERE trim(upper(length_desc)) = trim(upper(var_length_desc));
EXCEPTION when no_data_found then
SELECT seq_length_code.nextval INTO var_length FROM dual;
END;
--dbms_output.put_line('prod sub GROUP '||i.prod_sub_grp_desc);
--dbms_output.put_line('size '||i.size_desc);
--dbms_output.put_line('grade '||i.grade_desc);
/***** MPI description and code creation ******/
BEGIN
if var_mpi_desc is null then
--dbms_output.put_line('##'||var_mpi_desc);
if upper(i.prodgrpdesc) in('WR','SP','COMMODITY WR','SPECIAL WR') then
var_mpi_desc:=var_pi_desc;
--dbms_output.put_line('??'||var_mpi_desc);
elsif upper(i.skudesc) like 'BIC%' then
var_mpi_desc:=var_pi_desc;
-- dbms_output.put_line('++'||var_mpi_desc);
else
if i.branddesc = 'SISCO' then
/** no need to add the brand name **/
var_mpi_desc := i.prodsubgrpdesc||' '||i.sizedesc||' '|| i.gradedesc;
-- dbms_output.put_line('<>'||var_mpi_desc);
else
/** add brand also **/
var_mpi_desc := i.prodsubgrpdesc||' '||i.branddesc||' '||i.sizedesc||' '|| i.gr
adedesc;
-- dbms_output.put_line('&&'||var_mpi_desc);
END if;
END if;
END if;
BEGIN
SELECT distinct mpi INTO var_mpi
FROM UD_DM_SAP_PRODUCT_MAPPING
WHERE trim(mpi_desc) = trim(var_mpi_desc);
EXCEPTION when no_data_found then
SELECT seq_mpi_code.nextval INTO var_mpi FROM dual ;
END;
END;
--dbms_output.put_line('abcdef');
INSERT INTO UD_DM_ITEMMASTER(
ENTERPRISE,
SKU,
PI,
MPI,
GRADE_BRAND,
LENGTH,
PG_DIA,
GRADE,
PRODUCT_SUB_GRP,
PRODUCT_GRP,
ALL_PRODUCTS,
SKU_DESC,
PI_DESC,
MPI_DESC,

GRADE_BRAND_DESC,
LENGTH_DESC,
PG_DIA_DESC,
GRADE_DESC,
PRODUCT_SUB_GRP_DESC,
PRODUCT_GRP_DESC,
ALL_PRODUCTS_DESC
)
VALUES (
'TSTH',
trim(var_dm_sku_code),
trim(var_pi),
trim(var_mpi),
trim(var_grade_brand),
trim(var_length),
trim(var_pg_dia),
trim(var_grade) ,
trim(var_prod_sub_grp),
trim(var_product_grp),
2000000 ,
trim(i.skudesc),
trim(var_pi_desc),
trim(var_mpi_desc),
--decode(substr(b,1,instr(i.pi_desc,' ',1,4)),'',i.pi_desc, substr(i.pi_desc,1,i
nstr(i.pi_desc,' ',1,4))) ,
trim(i.gradedesc||'_'||i.branddesc),
trim(var_length_desc),
trim(i.prodgrpdesc||'_'||i.sizedesc),
trim(var_grade_desc),
trim(i.prodsubgrpdesc),
trim(i.prodgrpdesc),
'ALLPROD'
);
--insert into ss values(var_mpi_desc);
/*** Populate the flat hierarchy in the mapping tables as well ***/
UPDATE UD_DM_SAP_PRODUCT_MAPPING
SET pi
= trim(var_pi),
mpi
= trim(var_mpi),
grade_brand
= trim(var_grade_brand),
length
= trim(var_length ),
pg_dia
= trim(var_pg_dia ),
grade
= trim(var_grade ),
subgrp
= trim(var_prod_sub_grp),
pg
= trim(var_product_grp),
pi_desc
= trim(var_pi_desc),
mpi_desc
= trim(var_mpi_desc),
grade_brand_desc = trim(i.gradedesc||'_'||i.branddesc),
length_desc
= trim(var_length_desc),
pg_dia_desc
= trim(i.prodgrpdesc||'_'||i.sizedesc),
grade_desc
= trim(var_grade_desc ),
subgrp_desc
= trim(i.prodsubgrpdesc),
pg_desc
= trim(i.prodgrpdesc),
brand
= trim(i.branddesc),
sizes
= trim(i.sizedesc)
WHERE trim(sap_sku_code)=trim(i.skucode);
--EXCEPTION when others then
--INSERT INTO error_log
-- dbms_output.put_line('ERROR ===> '||substr(sqlerrm,1,200));
END;
var_mpi_desc:=null;
var_pi_desc:=null;

END LOOP;
COMMIT;
/*** New requirement to remove CB/CTL AND Special bars FROM UD_dM_itemmaster*
**/
/** commented AS it will be taken care of in the initial filter itself **/
/***
DELETE FROM UD_DM_ITEMMASTER
WHERE product_sub_grp_desc in ('SB','CB')
OR upper(product_grp_desc) ='REBAR' AND pi_desc like '%CL%';***/
UPDATE UD_dM_itemmaster SET scenario_id=0;
COMMIT;
END UD_DM_LOAD_IN_PROD_MSTR ;
/

You might also like