You are on page 1of 23

/*_UNICODE '000D00090020002A002000500072006F0063006500640075007200650020004E0061

006D00650020003A0020006200720065005F00720075006C0065005F00610064006A007500730074
005F0061006C00690067006E005F00700072006F0064007500630074000D00090020002A0020004C
006100730074002000550070006400610074006500640020006200790020003A0020005A00530020
004100730073006F006300690061007400650073000D00090020002A0020004C0061007300740020
00550070006400610074006500730020006F006E0020003A002000320035007400680020004A0061
006E0075006100720079002C00200032003000310033000D00090020002A00200052006500610073
006F006E00200066006F0072002000550070006400610074006500730020003A0020004300680061
006E00670065007300200069006E00740072006F0064007500630065006400200064007500650020
0074006F0020007300680069006600740069006E00670020006F006600200069006E007400650067
00720061007400650064002000730061006C0065007300200074006F00200075006E0061006C0069
0067006E002000660072006F006D00200061006C00690067006E002E000D00090020'XCF*/

REPLACE PROCEDURE bre_rule_adjust_align_product
(
IN in_ScenarioId INTEGER,
IN in_PhaseId INTEGER,
IN in_CycleId INTEGER,
IN in_RunId INTEGER,
IN in_RuleId INTEGER,
IN in_RuleOrder INTEGER,
IN in_TargetTableName VARCHAR(30),
IN in_TempTableName VARCHAR(30),
IN in_AuditTableName VARCHAR(30),
IN in_WriteAuditInd CHAR(1),
OUT out_Status INTEGER,
OUT out_StatusMessage VARCHAR(250)
)
BEGIN
DECLARE c_Blank VARCHAR(20) DEFAULT '-1';
DECLARE c_NumFailureStatus INTEGER DEFAULT -1;
DECLARE c_NumSuccessStatus INTEGER DEFAULT 0;
DECLARE c_ProcName VARCHAR(30) DEFAULT 'bre_rule_adjust_alig
n_product';
DECLARE c_ParamName VARCHAR(30) DEFAULT 'Alignment By Produc
t Change ';
DECLARE c_SourceSystemName VARCHAR(30) DEFAULT 'NEXTGEN';

DECLARE c_BusStartDt VARCHAR(10);
DECLARE c_BusEndDt VARCHAR(10);
DECLARE c_RecordStartTs VARCHAR(19);
DECLARE c_RecordEndTs VARCHAR(19);

DECLARE ProductBrands VARCHAR(1000);
DECLARE ClassificationType VARCHAR(100);
DECLARE AllocationSuffix VARCHAR(50);
DECLARE TerritorySuffix VARCHAR(50);
DECLARE ExclusionDataSource VARCHAR(50);
DECLARE FieldForceName VARCHAR(80);

DECLARE lv_DatabaseName VARCHAR(30);
DECLARE UnalignFactTable VARCHAR(30);
DECLARE SceTempTable VARCHAR(30);

DECLARE ProductBrandRemains VARCHAR(1000);
DECLARE CurrentProductBrand VARCHAR(40);

DECLARE InsertCount INTEGER;
DECLARE ExpireCount INTEGER;

DECLARE ProcStartTime TIMESTAMP(0);
DECLARE ProcEndTime TIMESTAMP(0);
DECLARE Progress VARCHAR(100);

DECLARE AuditLogStatus INTEGER;
DECLARE AuditLogStatusMessage VARCHAR(250);
DECLARE Status INTEGER;
DECLARE StatusMessage VARCHAR(250);
DECLARE ProcessLogStatus INTEGER;
DECLARE ProcessLogStatusMessage VARCHAR(250);
DECLARE TempTableName VARCHAR(30);

DECLARE CollectStatsSql VARCHAR(500);
DECLARE InsertSql VARCHAR(16000);
DECLARE InsertAuditSql VARCHAR(16000);
DECLARE DeleteSql VARCHAR(16000);

DECLARE MiscCount INTEGER;
DECLARE MiscIndex INTEGER;
DECLARE RulesCount INTEGER;
DECLARE SceBreTempTabInd CHAR(1) DEFAULT 'N';
DECLARE TempTabCreateInd CHAR(1) DEFAULT 'N';

DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SET Status = c_NumFailureStatus;
SET StatusMessage = 'SQL error #' || TRIM(SQLCODE) || '
during ' ||
COALESCE(Progress, 'unknown task') || '.';
SET ProcEndTime = CURRENT_TIMESTAMP(0);
CALL bre_load_process_log
(
in_ScenarioId,
in_PhaseId,
in_CycleId,
in_RunId,
in_RuleId,
c_ProcName,
ProcStartTime,
ProcEndTime,
Status,
StatusMessage,
ProcessLogStatus,
ProcessLogStatusMessage
);

IF SceBreTempTabInd = 'Y' THEN
CALL DBC.SysExecSQL('DROP TABLE ' || SceTempTable);
CALL DBC.SysExecSQL('DROP TABLE ' || UnalignFactTabl
e);
END IF;
IF TempTabCreateInd = 'Y' THEN
CALL DBC.SysExecSQL('DROP TABLE ' || TempTableName);
END IF;

SET out_Status = Status;
SET out_StatusMessage = StatusMessage;
END;

SET ProcStartTime = CURRENT_TIMESTAMP(0);
SET RulesCount = 0;
SET c_BusStartDt = '1900-01-01';
SET c_BusEndDt = '4000-01-01';
SET c_RecordStartTs = '1900-01-01 00:00:00';
SET c_RecordEndTs = '4000-01-01 00:00:00';

SELECT DATABASE INTO lv_DatabaseName;

RULE:
BEGIN
SET Progress = 'validation of rule ID/order and write au
dit indicator';
IF in_RuleId IS NULL THEN
SET Status = c_NumFailureStatus;
SET StatusMessage = 'Rule ID is null.';
LEAVE RULE;
ELSEIF in_RuleOrder IS NULL THEN
SET Status = c_NumFailureStatus;
SET StatusMessage = 'Rule order is null.';
LEAVE RULE;
ELSEIF in_WriteAuditInd NOT IN ('Y', 'N') THEN
SET Status = c_NumFailureStatus;
SET StatusMessage = 'Write audit indicator is not ''
Y'' or ''N''.';
LEAVE RULE;
END IF;

SET UnalignFactTable = 'ADJUST_ALIGN_PRODUCT_' ||
TRIM(in_ScenarioId) || '_' || TRIM(in_RunId);
CALL PROC_USER.RECREATE_T_TABLE_PROC(
'CORE', 'F_SALES_UNALIGN', UnalignFactTable);

SET SceTempTable = 'ADJUST_ALIGN_SCE_TMP_' || TRIM(in_Sc
enarioId) ||
'_' || TRIM(in_RunId);
CALL PROC_USER.RECREATE_T_TABLE_PROC(
'CORE', 'D_BRGE_COMP_ALIGNMENT_NDC', SceTempTable);

CALL DBC.SysExecSQL(
'INSERT INTO ' || UnalignFactTable || ' ' ||
'SELECT * ' ||
'FROM F_SALES_UNALIGN ' ||
'WHERE ' ||
'SCEN_ID = ' || TRIM(in_ScenarioId) || ' AND ' |
|
'RUN_ID = ' || TRIM(in_RunId) ||
' UNION ALL ' ||
'SELECT ' || TRI
M(in_ScenarioId) || ', ' || TRIM(in_RunId) || ', ' ||
'UNALIGN.FILE_ID
, ' ||
'UNALIGN.DATA_SO
URCE, ' ||
'UNALIGN.CUSTOME
R_DATA_SOURCE, ' ||
'UNALIGN.SRC_ROW
_NUM, ' ||
'UNALIGN.SRC_CUS
TOMER_NUM, ' ||
'UNALIGN.CUSTOME
R_NUMBER, ' ||
'UNALIGN.PRODUCT
_CODE, ' ||
'UNALIGN.PACK_ND
C_NUMBER, ' ||
'UNALIGN.SALES_C
ATEGORY_ID, ' ||
'UNALIGN.CONTRAC
T_ID, ' ||
'UNALIGN.TIME_ID
, ' ||
'UNALIGN.MEASURE
_ID, ' ||
'UNALIGN.MEASURE
_VALUE, ' ||
'UNALIGN.CREATE_
RULE_ID, ' ||
'UNALIGN.TOTAL_S
ALES_IND, ' ||
'UNALIGN.INTEGRA
TED_SALES_IND, ' ||
'UNALIGN.CREATE_
BY, ' ||
'UNALIGN.CREATE_
TS, ' ||
'UNALIGN.UPDATE_
BY, ' ||
'UNALIGN.UPDATE_
TS ' ||
'FROM F_SALES_UN
ALIGN UNALIGN ' ||
'INNER JOIN ' ||
'( '||
'SEL SFF.SCEN_ID
, FLL.FILE_ID ' ||
'FROM D_SCENARIO
SCEN ,AUTOMATION_CTL_DEPENDENT_FILES ACDF, FILE_LOAD_LOG FLL, ' ||
'D_BRGE_SCEN_FIE
LD_FORCE SFF ' ||

'WHERE SFF.FIELD_FORCE_NAME=ACDF.FIELD_FORCE_NAME ' ||

'AND SCEN.DATA_WK=ACDF.DATA_WK ' ||

'AND SCEN.DATA_MNTH=ACDF.DATA_MNTH ' ||

'AND ACDF.FILE_NAME=FLL.FILE_NAME ' ||

'AND SFF.SCEN_ID=SCEN.SCEN_ID ' ||

'AND SCEN.SCEN_SUBJECT_AREA = ACDF.SUBJECT_AREA ' ||

'AND SCEN.FREQUENCY = ACDF.FREQUENCY ' ||

'AND FLL.FILE_STATUS=''DIMENSION SUCCESS'' '||

'AND SCEN.SCEN_ID = ' || TRIM(in_ScenarioId) ||
' GROUP BY 1,2 '
||
') FILE_ID_LIST
' ||

'ON UNALIGN.FILE_ID = FILE_ID_LIST.FILE_ID ' ||
'INNER JOIN ' ||

'( ' ||

'SEL FILE_ID, FREQUENCY ' ||

'FROM CTL_PATTERN_PARAMETER C, FILE_LOAD_LOG F ' ||

'WHERE C.PATTERN_ID=F.PATTERN_ID ' ||

'GROUP BY 1,2 ' ||

') CPP ' ||

'ON FILE_ID_LIST.FILE_ID=CPP.FILE_ID '||
'LEFT OUTER JOIN
' ||

'( SELECT FILE_FREQUENCY , MIN_DATE, ' ||

'MAX_DATE, DATA_SOURCE FROM SCEN_MIN_MAX_DATE '||
'WHERE SCEN_ID =
' || TRIM(in_ScenarioId) ||

' AND DATA_SOURCE LIKE ''Early%'' group by 1,2,3,4 ' ||
') MIN_MAX_DT '
||

'ON ' ||

'UNALIGN.DATA_SOURCE = MIN_MAX_DT.DATA_SOURCE ' ||

'INNER JOIN ' ||

'( ' ||

'SEL PACK_NDC_NUMBER ' ||

'FROM D_BRGE_SF_NDC ' ||

'WHERE SCEN_ID=' || TRIM(in_ScenarioId) ||

' GROUP BY 1 ' ||

') SF_NDC ' ||

'ON UNALIGN.PACK_NDC_NUMBER=SF_NDC.PACK_NDC_NUMB
ER ' ||

'WHERE (UNALIGN.SCEN_ID, UNALIGN.RUN_ID ) IN ( '
||

'SEL BRGE_SCEN_ID,RUN_ID FROM ' ||

'D_SCENARIO SCEN, D_BRGE_SCEN_RELATiONSHIP BRGE , D_BRGE_SCEN_RU
N SCEN_RUN ' ||

'WHERE SCEN.SCEN_ID=BRGE.SCEN_ID AND ' ||

'SCEN.SCEN_ID=SCEN_RUN.SCEN_ID AND ' ||

'SCEN_RUN.ACTIVE_IND=''Y'' AND ' ||

'SCEN.SCEN_ID= ' || TRIM(in_ScenarioId) ||
' GROUP BY 1,2 )
AND ((UNALIGN.TIME_ID BETWEEN MIN_MAX_DT.MIN_DATE AND MIN_MAX_DT.MAX_DATE) OR M
IN_MAX_DT.MIN_DATE IS NULL)'
);

CALL DBC.SysExecSQL(
'INSERT INTO ' || SceTempTable || ' ' ||
'SELECT * ' ||
'FROM D_BRGE_COMP_ALIGNMENT_NDC ' ||
'WHERE SCEN_ID = ' || TRIM(in_ScenarioId)
);

CALL DBC.SysExecSQL(
'COLLECT STATS ON ' || SceTempTable || ' ' ||
'COLUMN(SCEN_ID, PACK_NDC_NUMBER, CUSTOMER_NUMBER)')
;
CALL DBC.SysExecSQL(
'COLLECT STATS ON ' || UnalignFactTable || ' ' ||
'COLUMN(SCEN_ID, PACK_NDC_NUMBER, CUSTOMER_NUMBER)')
;

SET SceBreTempTabInd = 'Y';

FOR cv_Parameter AS cv_ParameterList CURSOR FOR
SELECT *
FROM BRE_BUSINESS_RULE_PARAM
WHERE rule_id = in_RuleId
AND param_name = c_ParamName
DO
SET Progress = 'assignment of parameters';
SET ProductBrands = cv_Parameter.product_brands;
SET ClassificationType = cv_Parameter.classification
_type;
SET FieldForceName = cv_Parameter.field_force_name;
SET TerritorySuffix = cv_Parameter.char_1;
SET AllocationSuffix = cv_Parameter.char_2;
SET ExclusionDataSource = cv_Parameter.char_3;

SET Progress = 'validation of field force name';
SELECT COUNT(*)
INTO MiscCount
FROM D_FIELD_FORCE_DENORM
WHERE field_force_name = FieldForceName
AND scen_id = in_ScenarioId;

IF MiscCount IS NULL OR MiscCount = 0 THEN
SET Status = c_NumFailureStatus;
SET StatusMessage = 'Invalid field force ''' ||
COALESCE(FieldForceName, 'NULL') ||
''' used as parameter.';
LEAVE RULE;
END IF;

SELECT COUNT(*)
INTO MiscCount
FROM D_BRGE_SCEN_FIELD_FORCE
WHERE field_force_name = FieldForceName
AND scen_id = in_ScenarioId;

-- Only continuting if the field force is in the cor
rect scenario.
IF MiscCount IS NOT NULL AND MiscCount > 0 THEN
SET Progress = 'validation of exclusion data sou
rce';
SELECT COUNT(*)
INTO MiscCount
FROM D_DATA_SOURCE
WHERE data_source = TRIM(ExclusionDataSource);

IF MiscCount IS NULL OR MiscCount = 0 THEN
SET Status = c_NumFailureStatus;
SET StatusMessage = 'Invalid exclusion data
source ''' ||
COALESCE(ExclusionDataSource, 'NULL') ||
''' used as parameter.';
LEAVE RULE;
END IF;

SET Progress = 'validation of product brands';
SET ProductBrandRemains = ProductBrands;
SET ProductBrands = '';

IF ProductBrandRemains IS NULL THEN
SET Status = c_NumFailureStatus;
SET StatusMessage = 'List of product brands
is NULL.';
LEAVE RULE;
END IF;

WHILE CHARACTER_LENGTH(ProductBrandRemains) > 0
DO
SET MiscIndex = POSITION(',' IN ProductBrand
Remains);
IF MiscIndex = 0 THEN
SET CurrentProductBrand = TRIM(ProductBr
andRemains);
SET ProductBrandRemains = '';
ELSE
SET CurrentProductBrand =
TRIM(SUBSTR(ProductBrandRemains, 1,
MiscIndex - 1));
SET ProductBrandRemains =
TRIM(SUBSTR(ProductBrandRemains, Mis
cIndex + 1));
END IF;

SELECT COUNT(*)
INTO MiscCount
FROM D_PRODUCT_NOMINAL_DENORM
WHERE product_brand = CurrentProductBrand
AND scen_id = in_ScenarioId;

IF MiscCount IS NULL OR MiscCount = 0 THEN
SET Status = c_NumFailureStatus;
SET StatusMessage = 'Invalid product bra
nd ''' ||
COALESCE(CurrentProductBrand, 'NULL'
) ||
''' used as parameter.';
LEAVE RULE;
END IF;

IF ProductBrands = '' THEN
SET ProductBrands = '''' || CurrentProdu
ctBrand ||
'''';
ELSE
SET ProductBrands = ProductBrands || ',
''' ||
CurrentProductBrand || '''';
END IF;
END WHILE;

SET Progress = 'validation of classification typ
e';
IF TRIM(COALESCE(ClassificationType, '')) = '' T
HEN
SET Status = c_NumFailureStatus;
SET StatusMessage = 'Classification type is
null/blank.';
LEAVE RULE;
END IF;

SET Progress = 'validation of territory suffix';
IF TRIM(COALESCE(TerritorySuffix, '')) = '' THEN
SET Status = c_NumFailureStatus;
SET StatusMessage = 'Territory suffix (CHAR_
1) is ' ||
'null/blank.';
LEAVE RULE;
END IF;

SET Progress = 'validation of allocation suffix'
;
IF TRIM(COALESCE(AllocationSuffix, '')) = '' THE
N
SET Status = c_NumFailureStatus;
SET StatusMessage = 'Allocation suffix (CHAR
_2) is ' ||
'null/blank.';
LEAVE RULE;
END IF;

CALL bre_load_process_log
(
in_ScenarioId,
in_PhaseId,
in_CycleId,
in_RunId,
in_RuleId,
c_ProcName,
ProcStartTime,
ProcEndTime,
0,
'Inserting records in ' || in_AuditTableName
|| ' for ' ||
c_ProcName || ' started',
ProcessLogStatus,
ProcessLogStatusMessage
);

SET InsertAuditSql =
'INSERT INTO ' || in_AuditTableName || ' ' ||
'SELECT ' ||
'ALIGN.SCEN_ID AS SCEN_ID, ' ||
'ALIGN.RUN_ID AS RUN_ID, ' ||
'ALIGN.FILE_ID AS FILE_ID, ' ||
'ALIGN.DATA_SOURCE AS DATA_SOURCE, ' ||
'ALIGN.SRC_ROW_NUM AS SRC_ROW_NUM, ' ||
'ALIGN.CUSTOMER_NUMBER AS CUSTOMER_NUMBER, '
||
'ALIGN.SRC_CUSTOMER_NUM AS SRC_CUSTOMER_NUM,
' ||
'ALIGN.PRODUCT_CODE AS PRODUCT_CODE, ' ||
'ALIGN.PACK_NDC_NUMBER AS PACK_NDC_NUMBER, '
||
'ALIGN.SALES_CATEGORY_ID AS SALES_CATEGORY_I
D, ' ||
'ALIGN.CONTRACT_ID AS CONTRACT_ID, ' ||
'ALIGN.TIME_ID AS TIME_ID, ' ||
'ALIGN.TERRITORY_ID AS TERRITORY_ID, ' ||
'ALIGN.MEASURE_ID AS MEASURE_ID, ' ||
'ALIGN.MEASURE_VALUE AS MEASURE_VALUE, ' ||
'ALIGN.COMP_MEASURE_VAL AS COMP_MEASURE_VAL,
' ||
'ALIGN.CREATE_RULE_ID AS CREATE_RULE_ID, ' |
|
TRIM(in_RuleId) || ' AS REJECT_RULE_ID,' ||
'ALIGN.SC_GROUPING_ID AS SC_GROUPING_ID, ' |
|
'ALIGN.TOTAL_SALES_IND AS TOTAL_SALES_IND, '
||
'ALIGN.INTEGRATED_SALES_IND AS INTEGRATED_SA
LES_IND, ' ||
'ALIGN.CREATE_BY AS CREATE_BY, ' ||
'ALIGN.CREATE_TS AS CREATE_TS, ' ||
'ALIGN.UPDATE_BY AS UPDATE_BY, ' ||
'ALIGN.UPDATE_TS AS UPDATE_TS ' ||
'FROM ' ||
in_TargetTableName || ' ALIGN ' ||
'INNER JOIN ' ||
'(' ||
'SELECT CUSTOMER_NUMBER ' ||
'FROM D_CUSTOMER_CLASSIF_DENORM ' ||
'WHERE ' ||
'CLASSIFICATION_TYPE LIKE ''' ||
ClassificationType || ' ' || '%'
' AND ' ||
'SCEN_ID = ' || TRIM(in_ScenarioId)
|| ' ' ||
'GROUP BY CUSTOMER_NUMBER' ||
') CLASSIFICATION ON ' ||
'ALIGN.CUSTOMER_NUMBER = ' ||
'CLASSIFICATION.CUSTOMER_NUMBER ' ||
'INNER JOIN ' ||
'D_PRODUCT_NOMINAL_DENORM PRODUCT ON ' ||
'PRODUCT.PRODUCT_CODE = ALIGN.PRODUCT_CO
DE AND ' ||
'PRODUCT.PRODUCT_BRAND IN (' || ProductB
rands ||
') AND ' ||
'PRODUCT.SCEN_ID = ALIGN.SCEN_ID ' ||
'INNER JOIN ' ||
'D_TERRITORY_DENORM TERRITORY ON ' ||
'ALIGN.TERRITORY_ID = TERRITORY.TERRITOR
Y_ID AND ' ||
'TERRITORY.FIELD_FORCE_NAME = ''' || Fie
ldForceName ||
''' AND ' ||
'ALIGN.SCEN_ID = TERRITORY.SCEN_ID ' ||
'WHERE ' ||
'ALIGN.SCEN_ID = ' || TRIM(in_ScenarioId) ||
' AND ' ||
'ALIGN.RUN_ID = ' || TRIM(in_RunId) || ' AND
' ||
'ALIGN.DATA_SOURCE NOT IN (''' || ExclusionD
ataSource ||
''')';

SET DeleteSql =
'DELETE ALIGN ' ||
'FROM ' || in_TargetTableName || ' ALIGN ' ||
'WHERE ' ||
'CUSTOMER_NUMBER IN ('
'SELECT CUSTOMER_NUMBER ' ||
'FROM D_CUSTOMER_CLASSIF_DENORM ' ||
'WHERE ' ||
'CLASSIFICATION_TYPE LIKE ''' ||
ClassificationType || ' ' || '%'
' AND ' ||
'SCEN_ID = ' || TRIM(in_ScenarioId)
|| ' ' ||
'GROUP BY CUSTOMER_NUMBER' ||
') AND ' ||
'PRODUCT_CODE IN (' ||
'SELECT PRODUCT_CODE ' ||
'FROM D_PRODUCT_NOMINAL_DENORM ' ||
'WHERE ' ||
'PRODUCT_BRAND IN (' || ProductBrand
s ||
') AND ' ||
'SCEN_ID = ' || TRIM(in_ScenarioId)
|| ' ' ||
'GROUP BY PRODUCT_CODE' ||
') AND ' ||
'TERRITORY_ID IN (' ||
'SELECT TERRITORY_ID ' ||
'FROM D_TERRITORY_DENORM ' ||
'WHERE ' ||
'FIELD_FORCE_NAME = ''' || Field
ForceName ||
''' AND ' ||
'SCEN_ID = ' || TRIM(in_Scenario
Id) || ' ' ||
'GROUP BY TERRITORY_ID' ||
') AND ' ||
'SCEN_ID = ' || TRIM(in_ScenarioId) || ' AND
' ||
'RUN_ID = ' || TRIM(in_RunId) || ' AND ' ||
'DATA_SOURCE NOT IN (''' || ExclusionDataSou
rce || ''')';

SET TempTableName = 'SALES_UNALIGN_COMP_' ||
TRIM(in_ScenarioId) || '_' || TRIM(in_RunId)
;

SELECT COUNT(*)
INTO MiscCount
FROM DBC.TABLES
WHERE
UPPER(databasename) = UPPER(lv_DatabaseName)
AND
UPPER(tablename) = UPPER(TempTableName);

IF COALESCE(MiscCount, 0) > 0 THEN
CALL DBC.SysExecSql('DROP TABLE ' || TempTab
leName);
END IF;

SET Progress = 'creating temporary table';
CALL DBC.SysExecSQL(
'CREATE MULTISET TABLE ' || TempTableName ||
', ' ||
'NO FALLBACK, '||
'NO BEFORE JOURNAL, ' ||
'NO AFTER JOURNAL, ' ||
'CHECKSUM = DEFAULT ' ||
'(' ||
'SCEN_ID INTEGER NOT NULL, ' ||
'RUN_ID INTEGER NOT NULL, ' ||
'FILE_ID INTEGER NOT NULL, ' ||
'DATA_SOURCE VARCHAR(50) CHARACTER SET L
ATIN ' ||
'NOT CASESPECIFIC, '||
'SRC_ROW_NUM INTEGER NOT NULL, ' ||
'CUSTOMER_NUMBER VARCHAR(30) CHARACTER S
ET LATIN ' ||
'NOT CASESPECIFIC NOT NULL, ' ||
'SRC_CUSTOMER_NUM VARCHAR(80) CHARACTER
SET LATIN ' ||
'NOT CASESPECIFIC NOT NULL, ' ||
'PRODUCT_CODE VARCHAR(30) CHARACTER SET
LATIN ' ||
'NOT CASESPECIFIC, ' ||
'PACK_NDC_NUMBER VARCHAR(30) CHARACTER S
ET LATIN ' ||
'NOT CASESPECIFIC, ' ||
'SALES_CATEGORY_ID VARCHAR(30) CHARACTER
SET LATIN ' ||
'NOT CASESPECIFIC, ' ||
'CONTRACT_ID VARCHAR(30) CHARACTER SET L
ATIN ' ||
'NOT CASESPECIFIC, ' ||
'TIME_ID DATE FORMAT ''YYYY-MM-DD'' COMP
RESS, ' ||
'MEASURE_ID INTEGER COMPRESS, ' ||
'SC_GROUPING_ID INTEGER, ' ||
'MEASURE_VALUE DECIMAL(22,7) COMPRESS, '
||
'TOTAL_SALES_IND INTEGER COMPRESS, ' ||
'INTEGRATED_SALES_IND INTEGER COMPRESS, ' ||
'ALIGN_PERCENT_ALLOCATION DECIMAL(18,3),
' ||
'CREATE_BY VARCHAR(100) CHARACTER SET LA
TIN ' ||
'NOT CASESPECIFIC, ' ||
'CREATE_TS TIMESTAMP(0), ' ||
'UPDATE_BY VARCHAR(100) CHARACTER SET LA
TIN ' ||
'NOT CASESPECIFIC, ' ||
'UPDATE_TS TIMESTAMP(0)) ' ||
'PRIMARY INDEX F_SALES_UNALIGN_PI (CUSTOMER_
NUMBER) ' ||
'PARTITION BY (' ||
'RANGE_N(SCEN_ID BETWEEN 1 AND 3000 EACH
1, ' ||
'NO RANGE), ' ||
'RANGE_N(RUN_ID BETWEEN 1 AND 15 EACH 1,
NO RANGE)' ||
')');

SET TempTabCreateInd = 'Y';
SET Progress = 'insertion of records into tempor
ary table';
CALL DBC.SysExecSQL(
'INSERT INTO ' || TempTableName || ' ' ||
'SELECT ' ||
'UNALIGN.SCEN_ID, ' ||
'UNALIGN.RUN_ID, ' ||
'UNALIGN.FILE_ID, ' ||
'UNALIGN.DATA_SOURCE, ' ||
'UNALIGN.SRC_ROW_NUM, ' ||
'UNALIGN.CUSTOMER_NUMBER, ' ||
'UNALIGN.SRC_CUSTOMER_NUM, ' ||
'UNALIGN.PRODUCT_CODE, ' ||
'UNALIGN.PACK_NDC_NUMBER, ' ||
'UNALIGN.SALES_CATEGORY_ID, ' ||
'UNALIGN.CONTRACT_ID, ' ||
'UNALIGN.TIME_ID, ' ||
'UNALIGN.MEASURE_ID, ' ||
'NDC.SC_GROUPING_ID, ' ||
'UNALIGN.MEASURE_VALUE, ' ||
'UNALIGN.TOTAL_SALES_IND, ' ||
'UNALIGN.INTEGRATED_SALES_IND, ' ||
'NDC.ALIGN_PERCENT_ALLOCATION, ' ||
'''' || c_ProcName || ''', ' ||
'CURRENT_TIMESTAMP(0), ' ||
'''' || c_ProcName || ''', ' ||
'CURRENT_TIMESTAMP(0) ' ||
'FROM ' ||
UnalignFactTable || ' UNALIGN ' ||
'INNER JOIN ' ||
SceTempTable || ' NDC ON ' ||
'UNALIGN.SCEN_ID = NDC.SCEN_ID AND '
||
'UNALIGN.PACK_NDC_NUMBER = ' ||
'NDC.PACK_NDC_NUMBER AND ' ||
'UNALIGN.CUSTOMER_NUMBER = ' ||
'NDC.CUSTOMER_NUMBER AND ' ||
'UNALIGN.SRC_CUSTOMER_NUM = ' ||
'NDC.SRC_CUSTOMER_NUM AND ' ||
'NDC.FIELD_FORCE_NAME = ''' || Field
ForceName ||
''' ' ||
'INNER JOIN ' ||
'(' ||
'SELECT CUSTOMER_NUMBER ' ||
'FROM D_CUSTOMER_CLASSIF_DENORM ' ||
'WHERE ' ||
'CLASSIFICATION_TYPE LIKE ''' ||
ClassificationType || ' ' ||
'%'' AND ' ||
'SCEN_ID = ' || TRIM(in_Scenario
Id) || ' ' ||
'GROUP BY CUSTOMER_NUMBER' ||
') CLASSIFICATION ON ' ||
'UNALIGN.CUSTOMER_NUMBER = ' ||
'CLASSIFICATION.CUSTOMER_NUMBER
' ||
'WHERE ' ||
'UNALIGN.SCEN_ID = ' || TRIM(in_Scenario
Id) ||
' AND ' ||
'UNALIGN.RUN_ID = ' || TRIM(in_RunId));

SET Progress = 'Inserting records into target ta
ble';
SET InsertSql =
'INSERT INTO ' || in_TargetTableName || ' ' ||
'SELECT ' ||
'A.SCEN_ID AS SCEN_ID, ' ||
'A.RUN_ID AS RUN_ID, ' ||
'A.FILE_ID AS FILE_ID, ' ||
'A.DATA_SOURCE AS DATA_SOURCE, ' ||
'A.SRC_ROW_NUM AS SRC_ROW_NUM, ' ||
'A.CUSTOMER_NUMBER AS CUSTOMER_NUMBER, ' ||
'A.SRC_CUSTOMER_NUM AS SRC_CUSTOMER_NUM, ' |
|
'A.PRODUCT_CODE AS PRODUCT_CODE, ' ||
'A.PACK_NDC_NUMBER AS PACK_NDC_NUMBER, ' ||
'A.SALES_CATEGORY_ID AS SALES_CATEGORY_ID, '
||
'A.CONTRACT_ID AS CONTRACT_ID, ' ||
'A.TIME_ID AS TIME_ID, ' ||
'A.TERRITORY_ID AS TERRITORY_ID, ' ||
'A.MEASURE_ID AS MEASURE_ID, ' ||
'A.MEASURE_VALUE , ' ||
'A.COMP_MEASURE_VAL , ' ||
'A.CREATE_RULE_ID, ' ||
'A.SC_GROUPING_ID, ' ||
'A.TOTAL_SALES_IND, ' ||
'A.INTEGRATED_SALES_IND, ' ||
'A.CREATE_BY, ' ||
'A.CREATE_TS, ' ||
'A.UPDATE_BY, ' ||
'A.UPDATE_TS ' ||
'FROM '||
'(' ||
'SELECT ' ||
'ALIGN_REJECT.SCEN_ID AS SCEN_ID, ' ||
'ALIGN_REJECT.RUN_ID AS RUN_ID, ' ||
'ALIGN_REJECT.FILE_ID AS FILE_ID, ' ||
'ALIGN_REJECT.DATA_SOURCE AS DATA_SOURCE, '
||
'ALIGN_REJECT.SRC_ROW_NUM AS SRC_ROW_NUM, '
||
'ALIGN_REJECT.CUSTOMER_NUMBER AS CUSTOMER_NU
MBER, ' ||
'ALIGN_REJECT.SRC_CUSTOMER_NUM AS SRC_CUSTOM
ER_NUM, ' ||
'ALIGN_REJECT.PRODUCT_CODE AS PRODUCT_CODE,
' ||
'ALIGN_REJECT.PACK_NDC_NUMBER AS PACK_NDC_NU
MBER, ' ||
'ALIGN_REJECT.SALES_CATEGORY_ID AS SALES_CAT
EGORY_ID, ' ||
'ALIGN_REJECT.CONTRACT_ID AS CONTRACT_ID, '
||
'ALIGN_REJECT.TIME_ID AS TIME_ID, ' ||
'NEW_TERRITORY.TERRITORY_ID AS TERRITORY_ID,
' ||
'ALIGN_REJECT.MEASURE_ID AS MEASURE_ID, ' ||
'ALIGN_REJECT.MEASURE_VALUE * ' ||
'(CLASSIFICATION.PCT_ALLOC / 100) AS ' |
|
'MEASURE_VALUE, ' ||
'CASE WHEN ALIGN_REJECT.SC_GROUPING_ID = -1
' ||
'THEN 0 ' ||
'ELSE ALIGN_REJECT.MEASURE_VALUE * ' ||
'(CLASSIFICATION.PCT_ALLOC / 100) '
||
'END AS COMP_MEASURE_VAL, ' ||
TRIM(in_RuleId) || ' AS CREATE_RULE_ID, ' ||
'ALIGN_REJECT.SC_GROUPING_ID AS SC_GROUPING_
ID, ' ||
'ALIGN_REJECT.TOTAL_SALES_IND AS TOTAL_SALES
_IND, ' ||
'ALIGN_REJECT.INTEGRATED_SALES_IND AS INTEGR
ATED_SALES_IND, ' ||
'''' || c_ProcName || ''' AS CREATE_BY, ' ||
'CURRENT_TIMESTAMP(0) AS CREATE_TS, ' ||
'''' || c_ProcName || ''' AS UPDATE_BY, ' ||
'CURRENT_TIMESTAMP(0) AS UPDATE_TS ' ||
'FROM ' ||
'(' ||
'SELECT ' ||
'ALIGN.SCEN_ID AS SCEN_ID, ' ||
'ALIGN.RUN_ID AS RUN_ID, ' ||
'ALIGN.FILE_ID AS FILE_ID, ' ||
'ALIGN.DATA_SOURCE AS DATA_SOURCE, ' ||
'ALIGN.SRC_ROW_NUM AS SRC_ROW_NUM, ' ||
'UNALIGN.CUSTOMER_NUMBER AS CUSTOMER_NUM
BER, ' ||
'ALIGN.SRC_CUSTOMER_NUM AS SRC_CUSTOMER_
NUM, ' ||
'ALIGN.PRODUCT_CODE AS PRODUCT_CODE, ' |
|
'ALIGN.PACK_NDC_NUMBER AS PACK_NDC_NUMBE
R, ' ||
'ALIGN.SALES_CATEGORY_ID AS SALES_CATEGO
RY_ID, ' ||
'ALIGN.CONTRACT_ID AS CONTRACT_ID, ' ||
'ALIGN.TIME_ID AS TIME_ID, ' ||
'ALIGN.MEASURE_ID AS MEASURE_ID, ' ||
'UNALIGN.SC_GROUPING_ID AS SC_GROUPING_I
D, ' ||
'UNALIGN.MEASURE_VALUE AS MEASURE_VALUE,
' ||
'UNALIGN.TOTAL_SALES_IND AS TOTAL_SALES_IND, ' ||
'UNALIGN.INTEGRATED_SALES_IND AS INTEGRATED_SALES_IND ' ||
'FROM ' ||
in_AuditTableName || ' ALIGN ' ||
'INNER JOIN ' ||
'(' ||
'SELECT TERRITORY_ID ' ||
'FROM D_TERRITORY_DENORM ' ||
'WHERE ' ||
'SCEN_ID = ' || TRIM(in_Scenario
Id) ||
' AND ' ||
'FIELD_FORCE_NAME = ''' || Field
ForceName ||
''' ' ||
'GROUP BY 1' ||
') OLD_TERRITORY ON ' ||
'ALIGN.TERRITORY_ID = ' ||
'OLD_TERRITORY.TERRITORY_ID ' ||
'INNER JOIN ' ||
TempTableName || ' UNALIGN ON ' ||
'ALIGN.SCEN_ID = UNALIGN.SCEN_ID AND
' ||
'ALIGN.RUN_ID = UNALIGN.RUN_ID AND '
||
'ALIGN.FILE_ID = UNALIGN.FILE_ID AND
' ||
'ALIGN.DATA_SOURCE = UNALIGN.DATA_SO
URCE AND ' ||
'ALIGN.SRC_ROW_NUM = UNALIGN.SRC_ROW
_NUM AND ' ||
'ALIGN.CUSTOMER_NUMBER = ' ||
'UNALIGN.CUSTOMER_NUMBER AND ' |
|
'ALIGN.SRC_CUSTOMER_NUM = ' ||
'UNALIGN.SRC_CUSTOMER_NUM AND '
||
'ALIGN.PRODUCT_CODE = UNALIGN.PRODUC
T_CODE AND ' ||
'ALIGN.PACK_NDC_NUMBER = ' ||
'UNALIGN.PACK_NDC_NUMBER AND ' |
|
'ALIGN.SALES_CATEGORY_ID = ' ||
'UNALIGN.SALES_CATEGORY_ID AND '
||
'ALIGN.CONTRACT_ID = UNALIGN.CONTRAC
T_ID AND ' ||
'ALIGN.TIME_ID = UNALIGN.TIME_ID AND
' ||
'ALIGN.MEASURE_ID = UNALIGN.MEASURE_
ID AND ' ||
'ALIGN.TOTAL_SALES_IND = UNALIGN.TOTAL_SALES_IND AND ' ||
'ALIGN.INTEGRATED_SALES_IND = UNALIGN.INTEGRATED_SALES_IN
D ' ||
'WHERE ' ||
'REJECT_RULE_ID = ' || TRIM(in_RuleId) |
| ' AND ' ||
'ALIGN.SCEN_ID = ' || TRIM(in_ScenarioId
) || ' AND ' ||
'ALIGN.RUN_ID = ' || TRIM(in_RunId) || '
' ||
'GROUP BY ' ||
'ALIGN.SCEN_ID, ' ||
'ALIGN.RUN_ID, ' ||
'ALIGN.FILE_ID, ' ||
'ALIGN.DATA_SOURCE, ' ||
'ALIGN.SRC_ROW_NUM, ' ||
'UNALIGN.CUSTOMER_NUMBER, ' ||
'ALIGN.SRC_CUSTOMER_NUM, ' ||
'ALIGN.PRODUCT_CODE, ' ||
'ALIGN.PACK_NDC_NUMBER, ' ||
'ALIGN.SALES_CATEGORY_ID, ' ||
'ALIGN.CONTRACT_ID, ' ||
'ALIGN.TIME_ID, ' ||
'ALIGN.MEASURE_ID, ' ||
'UNALIGN.SC_GROUPING_ID, ' ||
'UNALIGN.MEASURE_VALUE, ' ||
'UNALIGN.TOTAL_SALES_IND, ' ||
'UNALIGN.INTEGRATED_SALES_IND ' ||
') ALIGN_REJECT ' ||
'INNER JOIN ' ||
'(' ||
'SELECT ' ||
'CUSTOMER_NUMBER, ' ||
'SUBSTR(CLASSIFICATION_TYPE, 1, CHARACTE
R_LENGTH(''' ||
ClassificationType || ''')) AS ' ||
'CLASSIFICATION_TYPE, ' ||
'CASE ' ||
'WHEN CLASSIFICATION_TYPE LIKE ''' |
|
ClassificationType || ' ' || Ter
ritorySuffix ||
'%'' THEN TRIM(SUBSTR(CLASSIFICA
TION_TYPE, ' ||
'CHARACTER_LENGTH(''' || Classif
icationType ||
' ' || TerritorySuffix || ''') +
1)) ' ||
'WHEN CLASSIFICATION_TYPE LIKE ''' |
|
ClassificationType || ' ' ||
AllocationSuffix || '%'' THEN '
||
'TRIM(SUBSTR(CLASSIFICATION_TYPE
, ' ||
'CHARACTER_LENGTH(''' || Classif
icationType ||
' ' || AllocationSuffix || ''')
+ 1)) ' ||
'END AS CLASSIFICATION_NUMBER, ' ||
'MAX(CASE WHEN CLASSIFICATION_TYPE LIKE
''' ||
ClassificationType || ' ' || Territo
rySuffix ||
'%'' THEN CLASSIFICATION_VALUE END)
AS ' ||
'TERRITORY_CODE, ' ||
'MAX(CASE WHEN CLASSIFICATION_TYPE LIKE
''' ||
ClassificationType || ' ' || Allocat
ionSuffix ||
'%'' THEN CLASSIFICATION_VALUE END)
AS ' ||
'PCT_ALLOC ' ||
'FROM D_CUSTOMER_CLASSIF_DENORM ' ||
'WHERE ' ||
'CLASSIFICATION_TYPE LIKE ''' || Classif
icationType ||
' ' || '%'' AND ' ||
'SCEN_ID = ' || TRIM(in_ScenarioId) || '
' ||
'GROUP BY ' ||
'1, 2, 3' ||
') CLASSIFICATION ON ' ||
'ALIGN_REJECT.CUSTOMER_NUMBER = ' ||
'CLASSIFICATION.CUSTOMER_NUMBER ' ||
'INNER JOIN ' ||
'(' ||
'SELECT ' ||
'PRODUCT_CODE ' ||
'FROM D_PRODUCT_NOMINAL_DENORM ' ||
'WHERE ' ||
'PRODUCT_BRAND IN (' || ProductBrands ||
') AND ' ||
'SCEN_ID = ' || TRIM(in_ScenarioId) ||
') PRODUCT ON ' ||
'ALIGN_REJECT.PRODUCT_CODE = PRODUCT.PRO
DUCT_CODE ' ||
'INNER JOIN ' ||
'(' ||
'SELECT ' ||
'TERRITORY_ID, ' ||
'TERRITORY_CODE ' ||
'FROM ' ||
'D_TERRITORY_DENORM ' ||
'WHERE ' ||
'SCEN_ID = ' || TRIM(in_ScenarioId) || '
AND ' ||
'FIELD_FORCE_NAME = ''' || FieldForceNam
e || ''' ' ||
'GROUP BY ' ||
'1, 2' ||
') NEW_TERRITORY ON ' ||
'CLASSIFICATION.TERRITORY_CODE = ' ||
'NEW_TERRITORY.TERRITORY_CODE ' ||
'GROUP BY ' ||
'1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, ' ||
'16, 17, 18, 19, 20, 21, 22, 23, 24 ' ||
'UNION '||
'SELECT ' ||
'UNALIGN_DATA.SCEN_ID AS SCEN_ID, ' ||
'UNALIGN_DATA.RUN_ID AS RUN_ID, ' ||
'UNALIGN_DATA.FILE_ID AS FILE_ID, ' ||
'UNALIGN_DATA.DATA_SOURCE AS DATA_SOURCE, '
||
'UNALIGN_DATA.SRC_ROW_NUM AS SRC_ROW_NUM, '
||
'UNALIGN_DATA.CUSTOMER_NUMBER AS CUSTOMER_NU
MBER, ' ||
'UNALIGN_DATA.SRC_CUSTOMER_NUM AS SRC_CUSTOM
ER_NUM, ' ||
'UNALIGN_DATA.PRODUCT_CODE AS PRODUCT_CODE,
' ||
'UNALIGN_DATA.PACK_NDC_NUMBER AS PACK_NDC_NU
MBER, ' ||
'UNALIGN_DATA.SALES_CATEGORY_ID AS SALES_CAT
EGORY_ID, ' ||
'UNALIGN_DATA.CONTRACT_ID AS CONTRACT_ID, '
||
'UNALIGN_DATA.TIME_ID AS TIME_ID, ' ||
'TERRITORY.TERRITORY_ID AS TERRITORY_ID, ' |
|
'UNALIGN_DATA.MEASURE_ID AS MEASURE_ID, ' ||
'UNALIGN_DATA.MEASURE_VALUE * ' ||
'(CLASSIFICATION.PCT_ALLOC / 100) AS ' |
|
'MEASURE_VALUE, ' ||
'CASE WHEN UNALIGN_DATA.SC_GROUPING_ID = -1
' ||
'THEN 0 ' ||
'ELSE UNALIGN_DATA.MEASURE_VALUE * ' ||
'(CLASSIFICATION.PCT_ALLOC / 100) '
||
'END AS COMP_MEASURE_VAL, ' ||
TRIM(in_RuleId) || ' AS CREATE_RULE_ID, ' ||
'UNALIGN_DATA.SC_GROUPING_ID AS SC_GROUPING_
ID, ' ||
'UNALIGN_DATA.TOTAL_SALES_IND AS TOTAL_SALES
_IND, ' ||
'UNALIGN_DATA.INTEGRATED_SALES_IND AS INTEGR
ATED_SALES_IND, ' ||
'''' || c_ProcName || ''' AS CREATE_BY, ' ||
'CURRENT_TIMESTAMP(0) AS CREATE_TS, ' ||
'''' || c_ProcName || ''' AS UPDATE_BY, ' ||
'CURRENT_TIMESTAMP(0) AS UPDATE_TS ' ||
'FROM ' ||
'(' ||
'SELECT ' ||
'UNALIGN.SCEN_ID AS SCEN_ID, ' ||
'UNALIGN.RUN_ID AS RUN_ID, ' ||
'UNALIGN.FILE_ID AS FILE_ID, ' ||
'UNALIGN.DATA_SOURCE AS DATA_SOURCE, ' |
|
'UNALIGN.SRC_ROW_NUM AS SRC_ROW_NUM, ' |
|
'UNALIGN.CUSTOMER_NUMBER AS CUSTOMER_NUM
BER, ' ||
'UNALIGN.SRC_CUSTOMER_NUM AS SRC_CUSTOME
R_NUM, ' ||
'UNALIGN.PRODUCT_CODE AS PRODUCT_CODE, '
||
'UNALIGN.PACK_NDC_NUMBER AS PACK_NDC_NUM
BER, ' ||
'UNALIGN.SALES_CATEGORY_ID AS SALES_CATE
GORY_ID, ' ||
'UNALIGN.CONTRACT_ID AS CONTRACT_ID, ' |
|
'UNALIGN.TIME_ID AS TIME_ID, ' ||
'UNALIGN.MEASURE_ID AS MEASURE_ID, ' ||
'UNALIGN.SC_GROUPING_ID AS SC_GROUPING_I
D, ' ||
'UNALIGN.MEASURE_VALUE AS MEASURE_VALUE,
' ||
'UNALIGN.TOTAL_SALES_IND AS TOTAL_SALES_IND, ' ||
'UNALIGN.INTEGRATED_SALES_IND AS INTEGRATED_SALES_IND ' ||
'FROM ' ||
TempTableName || ' UNALIGN ' ||
'WHERE UNALIGN.ALIGN_PERCENT_ALLOCATION = 0
' ||
'GROUP BY ' ||
'UNALIGN.SCEN_ID, ' ||
'UNALIGN.RUN_ID, ' ||
'UNALIGN.FILE_ID, ' ||
'UNALIGN.DATA_SOURCE, ' ||
'UNALIGN.SRC_ROW_NUM, ' ||
'UNALIGN.CUSTOMER_NUMBER, ' ||
'UNALIGN.SRC_CUSTOMER_NUM, ' ||
'UNALIGN.PRODUCT_CODE, ' ||
'UNALIGN.PACK_NDC_NUMBER, ' ||
'UNALIGN.SALES_CATEGORY_ID, ' ||
'UNALIGN.CONTRACT_ID, ' ||
'UNALIGN.TIME_ID, ' ||
'UNALIGN.MEASURE_ID, ' ||
'UNALIGN.SC_GROUPING_ID, ' ||
'UNALIGN.MEASURE_VALUE, ' ||
'UNALIGN.TOTAL_SALES_IND, ' ||
'UNALIGN.INTEGRATED_SALES_IND ' ||
') UNALIGN_DATA ' ||
'INNER JOIN ' ||
'(' ||
'SELECT ' ||
'CUSTOMER_NUMBER, ' ||
'SUBSTR(CLASSIFICATION_TYPE, 1, CHARACTE
R_LENGTH(''' ||
ClassificationType || ''')) AS ' ||
'CLASSIFICATION_TYPE, ' ||
'CASE ' ||
'WHEN CLASSIFICATION_TYPE LIKE ''' |
|
ClassificationType || ' ' || Ter
ritorySuffix ||
'%'' THEN TRIM(SUBSTR(CLASSIFICA
TION_TYPE, ' ||
'CHARACTER_LENGTH(''' || Classif
icationType ||
' ' || TerritorySuffix || ''') +
1)) ' ||
'WHEN CLASSIFICATION_TYPE LIKE ''' |
|
ClassificationType || ' ' ||
AllocationSuffix || '%'' THEN '
||
'TRIM(SUBSTR(CLASSIFICATION_TYPE
, ' ||
'CHARACTER_LENGTH(''' || Classif
icationType ||
' ' || AllocationSuffix || ''')
+ 1)) ' ||
'END AS CLASSIFICATION_NUMBER, ' ||
'MAX(CASE WHEN CLASSIFICATION_TYPE LIKE
''' ||
ClassificationType || ' ' || Territo
rySuffix ||
'%'' THEN CLASSIFICATION_VALUE END)
AS ' ||
'TERRITORY_CODE, ' ||
'MAX(CASE WHEN CLASSIFICATION_TYPE LIKE
''' ||
ClassificationType || ' ' || Allocat
ionSuffix ||
'%'' THEN CLASSIFICATION_VALUE END)
AS ' ||
'PCT_ALLOC ' ||
'FROM D_CUSTOMER_CLASSIF_DENORM ' ||
'WHERE ' ||
'CLASSIFICATION_TYPE LIKE ''' || Classif
icationType ||
' ' || '%'' AND ' ||
'SCEN_ID = ' || TRIM(in_ScenarioId) || '
' ||
'GROUP BY ' ||
'1, 2, 3' ||
') CLASSIFICATION ON ' ||
'UNALIGN_DATA.CUSTOMER_NUMBER = ' ||
'CLASSIFICATION.CUSTOMER_NUMBER ' ||
'INNER JOIN ' ||
'(' ||
'SELECT ' ||
'PRODUCT_CODE ' ||
'FROM D_PRODUCT_NOMINAL_DENORM ' ||
'WHERE ' ||
'PRODUCT_BRAND IN (' || ProductBrands ||
') AND ' ||
'SCEN_ID = ' || TRIM(in_ScenarioId) ||
') PRODUCT ON ' ||
'UNALIGN_DATA.PRODUCT_CODE = PRODUCT.PRO
DUCT_CODE ' ||
'INNER JOIN ' ||
'(' ||
'SELECT ' ||
'TERRITORY_ID, ' ||
'TERRITORY_CODE ' ||
'FROM ' ||
'D_TERRITORY_DENORM ' ||
'WHERE ' ||
'SCEN_ID = ' || TRIM(in_ScenarioId) || '
AND ' ||
'FIELD_FORCE_NAME = ''' || FieldForceNam
e || ''' ' ||
'GROUP BY ' ||
'1, 2' ||
') TERRITORY ON ' ||
'CLASSIFICATION.TERRITORY_CODE = ' ||
'TERRITORY.TERRITORY_CODE ' ||
'GROUP BY ' ||
'1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, ' ||
'16, 17, 18, 19, 20, 21, 22, 23, 24 ) A '||
'GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1
3, 14, 15, ' ||
'16, 17, 18, 19, 20, 21, 22, 23, 24 ' ;

CALL bre_load_process_log
(
in_ScenarioId,
in_PhaseId,
in_CycleId,
in_RunId,
in_RuleId,
c_ProcName,
CURRENT_TIMESTAMP(0),
CURRENT_TIMESTAMP(0),
0,
'Deleting and inserting records into ' ||
TRIM(in_TargetTableName)|| ' for ' || TR
IM(c_ProcName),
ProcessLogStatus,
ProcessLogStatusMessage
);

BEGIN TRANSACTION;
SET Progress = 'insertion into ' ||
TRIM(in_AuditTableName) || ' table';
CALL DBC.SysExecSQL(InsertAuditSql);
SET Progress = 'execution of fact delete SQL
statement';
CALL DBC.SysExecSQL(DeleteSql);
IF ExpireCount IS NULL THEN
SET ExpireCount = ACTIVITY_COUNT;
ELSE
SET ExpireCount = ExpireCount + ACTIVITY
_COUNT;
END IF;
SET Progress = 'execution of fact insert sta
tement';
CALL DBC.SysExecSQL(InsertSql);
IF InsertCount IS NULL THEN
SET InsertCount = ACTIVITY_COUNT;
ELSE
SET InsertCount = InsertCount + ACTIVITY
_COUNT;
END IF;
END TRANSACTION;

CALL bre_load_process_log
(
in_ScenarioId,
in_PhaseId,
in_CycleId,
in_RunId,
in_RuleId,
c_ProcName,
CURRENT_TIMESTAMP(0),
CURRENT_TIMESTAMP(0),
0,
TRIM(COALESCE(InsertCount, 0)) ||
' records inserted into ' ||
TRIM(in_TargetTableName) || ' for ' ||
TRIM(c_ProcName),
ProcessLogStatus,
ProcessLogStatusMessage
);
SET RulesCount = RulesCount + 1;
END IF;
END FOR;

IF SceBreTempTabInd = 'Y' THEN
CALL bre_load_process_log
(
in_ScenarioId,
in_PhaseId,
in_CycleId,
in_RunId,
in_RuleId,
c_ProcName,
CURRENT_TIMESTAMP(0),
CURRENT_TIMESTAMP(0),
0,
'Dropping Temporary Table ' || SceTempTable || '
, ' ||
UnalignFactTable,
ProcessLogStatus,
ProcessLogStatusMessage
);
CALL DBC.SysExecSQL('DROP TABLE ' || SceTempTable);
CALL DBC.SysExecSQL('DROP TABLE ' || UnalignFactTabl
e );
END IF;

IF TempTabCreateInd = 'Y' THEN
CALL bre_load_process_log
(
in_ScenarioId,
in_PhaseId,
in_CycleId,
in_RunId,
in_RuleId,
c_ProcName,
CURRENT_TIMESTAMP(0),
CURRENT_TIMESTAMP(0),
0,
'Dropping Temporary Table ' || TempTableName,
ProcessLogStatus,
ProcessLogStatusMessage
);
CALL DBC.SysExecSQL('DROP TABLE ' ||TempTableName);
END IF;

-- Cleanup.
SET Progress = 'cleanup';
SET Status = c_NumSuccessStatus;
SET StatusMessage = TRIM(RulesCount) || ' ' ||
'alignment adjustment product rule(s) succeeded.';
END;

SET ProcEndTime = CURRENT_TIMESTAMP(0);
CALL bre_load_audit
(
in_ScenarioId,
in_PhaseId,
in_CycleId,
in_RunId,
in_RuleId,
in_RuleOrder,
ProcStartTime,
ProcEndTime,
COALESCE(InsertCount, 0),
COALESCE(ExpireCount, 0),
Status,
AuditLogStatus,
AuditLogStatusMessage
);

CALL bre_load_process_log
(
in_ScenarioId,
in_PhaseId,
in_CycleId,
in_RunId,
in_RuleId,
c_ProcName,
ProcStartTime,
ProcEndTime,
Status,
StatusMessage,
ProcessLogStatus,
ProcessLogStatusMessage
);
SET out_Status = Status;
SET out_StatusMessage = StatusMessage;
END;

You might also like