0% found this document useful (0 votes)
24 views

SP Data Load

Uploaded by

hari prasad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
24 views

SP Data Load

Uploaded by

hari prasad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 30

set define off;

create or replace PROCEDURE SP_DATA_LOAD( P_INTERFACE_ID VARCHAR2,


P_USER_ID VARCHAR2 DEFAULT
'DATA_LOAD')
IS
--PRAGMA AUTONOMOUS_TRANSACTION;
CURSOR C2 IS SELECT *
FROM SYS_LOAD_INTERFACE_RULES
WHERE INTERFACE_ID =P_INTERFACE_ID
AND NVL(ACTIVE_FLAG,'N')='Y'
ORDER BY FIELD_NAME,RULE_EXECUTION_SEQ;

CURSOR C3 IS SELECT *
FROM SYS_LOAD_INTERFACE_DETAIL
WHERE INTERFACE_ID=P_INTERFACE_ID
AND NVL(IGNORE_DESTINATION,'N') ='N'
ORDER BY LINE_NO;

CURSOR C4 IS SELECT *
FROM SYS_LOAD_INTERFACE_POST_SQLS
WHERE INTERFACE_ID=P_INTERFACE_ID
AND NVL(ACTIVE_FLAG,'N') ='Y'
ORDER BY LINE_NO; --- post sqls

CURSOR C5 IS SELECT *
FROM SYS_LOAD_INTERFACE_SQLS
WHERE INTERFACE_ID=P_INTERFACE_ID
AND NVL(ACTIVE_FLAG,'N') ='Y'
ORDER BY LINE_NO; --- pre sqls

CURSOR C6 IS SELECT A.DESTINATION_TABLE_NAME,


A.DESTINATION_FIELD_NAME ,
A.DESTINATION_FIELD_VALUE,
A.DESTINATION_TYPE ,
B.SOURCE_TABLE_NAME ,
A.SOURCE_FIELD_NAME ,
A.SOURCE_FIELD_NAME_FOR_CLEANUP,
NVL(A.NON_DATABASE_SOURCE_COLUMN,'N') AS
NON_DATABASE_SOURCE_COLUMN
FROM SYS_LOAD_INTERFACE_DETAIL A,
SYS_LOAD_INTERFACE_HEADER B
WHERE A.INTERFACE_ID=P_INTERFACE_ID
AND A.INTERFACE_ID = B.INTERFACE_ID
AND A.DESTINATION_TYPE IN ('N')
ORDER BY LINE_NO;

CURSOR C7 IS SELECT A.DESTINATION_TABLE_NAME,


A.DESTINATION_FIELD_NAME ,
A.DESTINATION_FIELD_VALUE,
A.DESTINATION_TYPE ,
B.SOURCE_TABLE_NAME ,
A.SOURCE_FIELD_NAME ,
A.SOURCE_FIELD_NAME_FOR_CLEANUP,
A.FORMAT_MODEL,
NVL(A.NON_DATABASE_SOURCE_COLUMN,'N') AS
NON_DATABASE_SOURCE_COLUMN,
A.FORMAT_MODEL_DEFAULT_VALUE
FROM SYS_LOAD_INTERFACE_DETAIL A,
SYS_LOAD_INTERFACE_HEADER B
WHERE A.INTERFACE_ID = P_INTERFACE_ID
AND A.INTERFACE_ID = B.INTERFACE_ID
AND A.DESTINATION_TYPE IN ('D')
and nvl(IGNORE_DESTINATION ,'N')='N'
ORDER BY LINE_NO;

CURSOR S1 IS
SELECT B.COLUMN_NAME ,A.*
FROM SYS_LOAD_INTERFACE_DETAIL A,
USER_TAB_COLUMNS B
WHERE INTERFACE_ID=P_INTERFACE_ID
AND A.DESTINATION_TABLE_NAME = B.TABLE_NAME(+)
AND A.DESTINATION_FIELD_NAME = B.COLUMN_NAME(+)
ORDER BY LINE_NO;
CURSOR S2 IS
SELECT A.LINE_NO, A.SOURCE_FIELD_NAME
FROM SYS_LOAD_INTERFACE_DETAIL A,
SYS_LOAD_INTERFACE_HEADER B
WHERE A.INTERFACE_ID = P_INTERFACE_ID
AND A.INTERFACE_ID = B.INTERFACE_ID
AND A.SOURCE_FIELD_NAME IS NOT NULL
AND NVL(IGNORE_DESTINATION,'N')='N'
AND NVL(A.NON_DATABASE_SOURCE_COLUMN ,'N')='N'
AND A.SOURCE_FIELD_NAME NOT IN (SELECT COLUMN_NAME
FROM USER_TAB_COLS
WHERE TABLE_NAME
=B.SOURCE_TABLE_NAME) ;
CURSOR S3 IS
SELECT A.FIELD_NAME ,
A.RULE_TYPE ,
B.SOURCE_FIELD_NAME ,
B.DESTINATION_FIELD_VALUE
FROM SYS_LOAD_INTERFACE_RULES A ,
SYS_LOAD_INTERFACE_DETAIL B
WHERE A.INTERFACE_ID = P_INTERFACE_ID
AND A.INTERFACE_ID = B.INTERFACE_ID
AND NVL(A.ACTIVE_FLAG,'N')= 'Y'
and rule_type <> 'Field is caps'
AND A.FIELD_NAME = B.DESTINATION_FIELD_NAME(+)
ORDER BY A.FIELD_NAME,
A.RULE_EXECUTION_SEQ;

CURSOR S4 IS
SELECT CASE WHEN NVL(N.NON_DATABASE_SOURCE_COLUMN,'N') ='Y'
THEN NVL(N.SOURCE_FIELD_NAME_FOR_CLEANUP,chr(39)||
N.DESTINATION_FIELD_VALUE||chr(39))
ELSE SOURCE_FIELD_NAME END as pkcheck,
O.SOURCE_TABLE_NAME,
M.COLUMN_NAME AS DB_PK_COLUMN
--, N.*
FROM (SELECT B.COLUMN_NAME, A.TABLE_NAME FROM ALL_CONSTRAINTS
A,ALL_CONS_COLUMNS B
WHERE A.CONSTRAINT_TYPE = 'P'
AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME) M,
SYS_LOAD_INTERFACE_DETAIL N ,
SYS_LOAD_INTERFACE_HEADER O
WHERE M.COLUMN_NAME = N.DESTINATION_FIELD_NAME (+)
AND N.INTERFACE_ID = P_INTERFACE_ID
AND n.INTERFACE_ID = O.INTERFACE_ID
AND M.TABLE_NAME = O.DESTINATION_TABLE_NAME
AND NVL(N.IGNORE_DESTINATION,'N')= 'N' ;

V_NAME SD_CUSTOMERS.NAME%TYPE;
V_DESTINATION_FIELD_NAME
SYS_LOAD_INTERFACE_DETAIL.DESTINATION_FIELD_NAME%TYPE ;
V_DFLT_DESTINATION_FIELD_VALUE
SYS_LOAD_INTERFACE_DETAIL.DESTINATION_FIELD_VALUE%TYPE;
V_DESTINATION_FIELD_VALUE
SYS_LOAD_INTERFACE_DETAIL.DESTINATION_FIELD_VALUE%TYPE;
V_DESTINATION_TABLE_NAME
SYS_LOAD_INTERFACE_DETAIL.DESTINATION_TABLE_NAME%TYPE;
V_DFLT_FORMAT_MODEL
SYS_LOAD_INTERFACE_DETAIL.FORMAT_MODEL_DEFAULT_VALUE%TYPE;
V_IGNORE_DESTINATION SYS_LOAD_INTERFACE_DETAIL.IGNORE_DESTINATION
%TYPE ;
V_NON_DATABASE_SOURCE_COLUMN
SYS_LOAD_INTERFACE_DETAIL.NON_DATABASE_SOURCE_COLUMN%TYPE;
V_SOURCE_FIELD_NAME SYS_LOAD_INTERFACE_DETAIL.SOURCE_FIELD_NAME
%TYPE;
V_SOURCE_FIELDNAME_FOR_CLEANUP
SYS_LOAD_INTERFACE_DETAIL.SOURCE_FIELD_NAME_FOR_CLEANUP%TYPE;
V_SOURCE_FIELD_NAME_FORCLEANUP
SYS_LOAD_INTERFACE_DETAIL.SOURCE_FIELD_NAME_FOR_CLEANUP%TYPE;
V_SOURCE_TABLE_NAME SYS_LOAD_INTERFACE_DETAIL.SOURCE_TABLE_NAME
%TYPE;
V_LOAD_HEADER SYS_LOAD_INTERFACE_HEADER%ROWTYPE;
V_OVERWRITE SYS_LOAD_INTERFACE_HEADER.OVERWRITE_REQUIRED
%TYPE;
V_SNO SYS_LOAD_INTERFACE_LOG.SNO%TYPE;
V_DEST_DATA_TYPE USER_TAB_COLUMNS.DATA_TYPE%TYPE;
V_IGNORE_PK_CHECK number(20);
V_IGNORE_NUM_CHECK number(20);

V_NO_OF_RECORDS NUMBER(20) ;
V_ERRORS_FOUND_TOTAL NUMBER(20) ;
V_ERRORS_FOUND NUMBER(20) ;
V_MAX_PADDING NUMBER(20) :=30;
V_CNT NUMBER(20) ;
V_CAPS NUMBER(20) ;
V_LINE_NO NUMBER(20) ;
V_FIELD_IS_CAPS VARCHAR2(10) ;

V_SQL_STRING VARCHAR2(32667) ;
V_SQL_STRING_RESULT VARCHAR2(32666) ;
V_INSERT VARCHAR2(32666);
V_INSERT1 VARCHAR2(32666);
V_SELECT VARCHAR2(32000);
V_SQL VARCHAR2(32000);
V_WHERE_CONDITION VARCHAR2(4000) ;
V_ERROR_LOGS VARCHAR2(4000) ;
V_SOURCE_FIELD_NAME_TEMP VARCHAR2(4000) ;
V_DB_PK_COLUMN VARCHAR2(4000) ;
V_FIELD_TO_CHECK VARCHAR2(4000) ;
V_FLAG VARCHAR2(4000) ;
V_COUNT NUMBER(20) ;
V_RAISE_ERROR NUMBER(20) :=0;

V_LOG_FOOTPRINT VARCHAR2(200) :='SP_DATA_LOAD '||


P_INTERFACE_ID;

SETUP_ERRORS EXCEPTION;
SETUP_ERRORS_MISSING_MAPPING EXCEPTION;
OUT_ERRORS EXCEPTION;
TABLE_ERROR_DESTINATION EXCEPTION;
TABLE_ERROR_SOURCE EXCEPTION;
BEGIN

SELECT *
INTO V_LOAD_HEADER
FROM SYS_LOAD_INTERFACE_HEADER
WHERE INTERFACE_ID = P_INTERFACE_ID;

-- V_WHERE_CONDITION := V_LOAD_HEADER.WHERE_CONDITION

-----------------------------------------------------------------------------------
-------------------------
------------------------------------CLEAN UP THE LOGS/TARGET
TABLE------------------------------------------

-----------------------------------------------------------------------------------
-------------------------
BEGIN
DELETE FROM SYS_LOAD_INTERFACE_LOG_DETAIL WHERE SNO IN (SELECT SNO FROM
SYS_LOAD_INTERFACE_LOG WHERE INTERFACE_ID = P_INTERFACE_ID);
DELETE FROM SYS_LOAD_INTERFACE_LOG_DETAIL WHERE SNO NOT IN (SELECT SNO FROM
SYS_LOAD_INTERFACE_LOG ) ; -- REMOVE OTHER JUNKS.
DELETE FROM SYS_LOAD_INTERFACE_LOG WHERE INTERFACE_ID =
P_INTERFACE_ID;
DELETE FROM SYS_LOAD_INTERFACE_SUMMARY WHERE INTERFACE_ID =
P_INTERFACE_ID;
/*
SUMMARY_TYPE='Data Setup Checks';
SUMMARY_TYPE='Destination Table Setup Checks';
SUMMARY_TYPE='Source Table Setup Checks';
SUMMARY_TYPE='DATA_LOADED_INFO';
*/
EXCEPTION
WHEN OTHERS THEN NULL;
END;

V_FLAG := '1';

DECLARE
V_AVL NUMBER;
BEGIN
SELECT COUNT(*) INTO V_AVL FROM TAB WHERE TNAME =
V_LOAD_HEADER.DESTINATION_TABLE_NAME;
IF V_AVL = 0 THEN
-- Exception TABLE_ERROR_DESTINATION --
ZZZ_TEST(' END TABLE_ERROR_DESTIN:'||SQLERRM ||
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,V_LOG_FOOTPRINT);
SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,
CHR(10)||' Pl. complete the Setups for Loading
Process.'
||CHR(10)||' Check for field with label '

||CHR(39)||'Destination Table Name'


||CHR(39)||' ,on the First Tab('
||CHR(39)||'Interface Setup'
||CHR(39)||'), and in the Region: '
||CHR(39)||'Load Interface Setup'
||CHR(39)
,NULL,
'<font color= "Red"><B>Incomplete Setup.</B> </font>
Destination Table <B>'
||V_LOAD_HEADER.DESTINATION_TABLE_NAME
||'</B> does not Exist.');
DELETE FROM SYS_LOAD_INTERFACE_SUMMARY WHERE INTERFACE_ID=P_INTERFACE_ID
AND SUMMARY_TYPE='Destination Table Setup Checks';

SELECT NVL(MAX(LINE_NO),0)+1 INTO V_LINE_NO FROM SYS_LOAD_INTERFACE_SUMMARY


WHERE INTERFACE_ID=P_INTERFACE_ID ;-- AND SUMMARY_TYPE='Destination Table Setup
Checks';

INSERT INTO SYS_LOAD_INTERFACE_SUMMARY( INTERFACE_ID,LINE_NO, SUMMARY_TYPE,


SUMMARY_RESULTS, NOTES, CREATED_BY,CREATED_DATE)
VALUES( P_INTERFACE_ID ,V_LINE_NO ,'Destination Table Setup
Checks','Data Processed by ' || P_USER_ID || ' on ' || SYSDATE,
'<font color= "Red">Data load Setup incomplete wrt Destination
Table.</font>' ,
P_USER_ID,SYSDATE);
COMMIT;

v_raise_error:=001;-- RAISE OUT_ERRORS;


END IF;
EXCEPTION
WHEN OTHERS THEN
v_raise_error:=001;
-- RAISE TABLE_ERROR_DESTINATION; --OUT_ERRORS to change this
null;

END;
V_FLAG := '2';
DECLARE
V_AVL NUMBER;
BEGIN
SELECT COUNT(*) INTO V_AVL FROM TAB WHERE TNAME =
V_LOAD_HEADER.SOURCE_TABLE_NAME;
IF V_AVL = 0 THEN
---TABLE_ERROR_SOURCE
ZZZ_TEST(' END TABLE_ERROR_SOURCE:'||SQLERRM ||
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,V_LOG_FOOTPRINT);
SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID, CHR(10)||' Pl. complete the Setups
for Loading Process.'
||CHR(10)||' Check for field with label '

||CHR(39)||'Source Table Name'||


CHR(39)||' ,on the First Tab('
||CHR(39)||'Interface Setup'||
CHR(39)||'), and in the Region: '
||CHR(39)||'Load Interface Setup'||
CHR(39)
,NULL,
'<font color= "Red"><B>Incomplete
Setup.</B> </font>Source Table <B>'||V_LOAD_HEADER.SOURCE_TABLE_NAME||'</B> does
not Exist.');
DELETE FROM SYS_LOAD_INTERFACE_SUMMARY WHERE INTERFACE_ID=P_INTERFACE_ID
AND SUMMARY_TYPE='Source Table Setup Checks';
SELECT NVL(MAX(LINE_NO),0)+1 INTO V_LINE_NO FROM SYS_LOAD_INTERFACE_SUMMARY
WHERE INTERFACE_ID=P_INTERFACE_ID ;-- AND SUMMARY_TYPE='Source Table Setup
Checks';
INSERT INTO SYS_LOAD_INTERFACE_SUMMARY( INTERFACE_ID,LINE_NO, SUMMARY_TYPE,
SUMMARY_RESULTS, NOTES, CREATED_BY,CREATED_DATE)
VALUES( P_INTERFACE_ID ,V_LINE_NO ,'Source Table Setup Checks','Data
Processed by ' || P_USER_ID || ' on ' || SYSDATE,
'<font color= "Red">Data load Setup incomplete wrt Source
Table.</font>' ,
P_USER_ID,SYSDATE);
COMMIT;
v_raise_error:=0;
--- RAISE OUT_ERRORS;
END IF;
EXCEPTION
WHEN OTHERS THEN
v_raise_error:=0;
--RAISE TABLE_ERROR_SOURCE; --OUT_ERRORS to change this
null;

END;
-----------------------------------------------------------------------------------
-------------------------
---------------------------------------SETUP CHECKS DESTINATION Table columns
------------------------------
-----------------------------------------------------------------------------------
-------------------------
ZZZ_TEST('S1 CURSOR Desti col LOOP STARTS : ',V_LOG_FOOTPRINT);
FOR X IN S1 LOOP
IF X.COLUMN_NAME IS NULL THEN
V_SQL:='Check "Load Interface Setup Detail" tab ';
v_raise_error:= 1;
SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,
V_SQL,
V_CNT,
'Destination Field Name : <font
color= "Red"><B>'|| X.DESTINATION_FIELD_NAME||'</B></font> at line no:'||
x.line_no||' not Found');
V_ERRORS_FOUND := NVL(V_ERRORS_FOUND,0)+1;
END IF;

END LOOP;

IF V_ERRORS_FOUND >0 THEN


V_ERRORS_FOUND_TOTAL := NVL(V_ERRORS_FOUND_TOTAL,0) + V_ERRORS_FOUND;
IF V_ERROR_LOGS IS NULL THEN V_ERROR_LOGS :='Data load Setup incorrect wrt
destination columns';
ELSE V_ERROR_LOGS:= V_ERROR_LOGS ||',Data
load Setup incorrect wrt Destination Field Names';
END IF;
END IF;
V_ERRORS_FOUND :=0;
V_SOURCE_FIELD_NAME_FORCLEANUP:= NULL;

-----------------------------------------------------------------------------------
-------------------------
---------------------------------------SETUP CHECKS SOURCE TABLE columns
-----------------------------------
-----------------------------------------------------------------------------------
-------------------------
ZZZ_TEST('S2 CURSOR Source col LOOP STARTS : ',V_LOG_FOOTPRINT);
FOR X IN S2 LOOP
V_SQL:='Check "Load Interface Setup Detail" tab ';
v_raise_error:= 2;
SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,
V_SQL,
V_CNT,
'Source Field Name : <font color=
"Red"><B>'|| X.SOURCE_FIELD_NAME||'</B></font> at line no:'||x.line_no||' not
Found');
V_ERRORS_FOUND := NVL(V_ERRORS_FOUND,0)+1;
END LOOP;

IF V_ERRORS_FOUND >0 THEN


V_ERRORS_FOUND_TOTAL := NVL(V_ERRORS_FOUND_TOTAL,0) + V_ERRORS_FOUND;
IF V_ERROR_LOGS IS NULL THEN V_ERROR_LOGS :='Data load Setup incorrect wrt
Source columns';
ELSE V_ERROR_LOGS:= V_ERROR_LOGS ||',Data
load Setup incorrect wrt Source Field Names';
END IF;
END IF;
V_ERRORS_FOUND :=0;
V_SOURCE_FIELD_NAME_FORCLEANUP:= NULL;

-----------------------------------------------------------------------------------
-------------------------
---------------------------------------business rules CHECKS
--------------------------------------------------
-----------------------------------------------------------------------------------
-------------------------
ZZZ_TEST('S3 CURSOR BR check LOOP STARTS : ',V_LOG_FOOTPRINT);

SELECT max( length(A.FIELD_NAME )) into v_max_padding


FROM SYS_LOAD_INTERFACE_RULES A ,
SYS_LOAD_INTERFACE_DETAIL B
WHERE A.INTERFACE_ID = P_INTERFACE_ID
AND A.INTERFACE_ID = B.INTERFACE_ID
AND NVL(A.ACTIVE_FLAG,'N')= 'Y'
AND A.FIELD_NAME = B.DESTINATION_FIELD_NAME(+)
and rule_type <> 'Field is caps';

FOR X IN S3 LOOP
V_SQL:='Check "Load Interface Setup Detail" tab and "Load Interface Rules"
region on "Interface Rule" tab'||CHR(10)||' Disable the rule or fix the Requried
setups columns';
if nvl(x.SOURCE_FIELD_NAME, x.DESTINATION_FIELD_VALUE) is null then
SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,
V_SQL,
V_CNT,
'Source Field Name : <font
face="Courier New" color= "Red"><B>'|| X.FIELD_NAME||Rpad(' ',((v_max_padding-
length(x.field_name))*5)-4,'&nbsp')||'</B></font> is required for Rule:'||
x.RULE_TYPE||'. ');
V_ERRORS_FOUND := NVL(V_ERRORS_FOUND,0)+1;
end if;
END LOOP;

IF V_ERRORS_FOUND >0 THEN


V_ERRORS_FOUND_TOTAL := NVL(V_ERRORS_FOUND_TOTAL,0) + V_ERRORS_FOUND;
IF V_ERROR_LOGS IS NULL THEN V_ERROR_LOGS :='Data load Setup incomplete wrt
Business Rules';
ELSE V_ERROR_LOGS:= V_ERROR_LOGS ||',Data
load Setup incomplete wrt Business Rules';
END IF;
--SETUP_ERRORS
ZZZ_TEST(' END SETUP_ERRORS:'||SQLERRM ||
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,V_LOG_FOOTPRINT);
DELETE FROM SYS_LOAD_INTERFACE_SUMMARY WHERE INTERFACE_ID=P_INTERFACE_ID
AND SUMMARY_TYPE='Data Setup Checks';
SELECT NVL(MAX(LINE_NO),0)+1 INTO V_LINE_NO FROM SYS_LOAD_INTERFACE_SUMMARY
WHERE INTERFACE_ID=P_INTERFACE_ID ;-- AND SUMMARY_TYPE='Data Setup Checks';
INSERT INTO SYS_LOAD_INTERFACE_SUMMARY( INTERFACE_ID,LINE_NO, SUMMARY_TYPE,
SUMMARY_RESULTS, NOTES, CREATED_BY,CREATED_DATE)
VALUES( P_INTERFACE_ID ,V_LINE_NO ,'Data Setup Checks','Data Processed
by ' || P_USER_ID || ' on ' || SYSDATE,
'<font color= "Red">Data load Setup incomplete wrt Business
Rules.</font>' ,
P_USER_ID,SYSDATE);
COMMIT;
v_raise_error:=3;
--RAISE OUT_ERRORS ;

END IF;
V_ERRORS_FOUND :=0;
V_SOURCE_FIELD_NAME_FORCLEANUP:= NULL;

-----------------------------------------------------------------------------------
-------------------------
---------------------------------------Check for Primary key data violation
--------------------------------
-----------------------------------------------------------------------------------
-------------------------

ZZZ_TEST('S4 CURSOR PK Check LOOP STARTS : ',V_LOG_FOOTPRINT);

declare
v_sql_pk_check varchar2(10000):= 'select ';
v_pk_columns varchar2(1000) ;
v_SOURCE_TABLE_NAME varchar2(1000);
v_count number(20);

v_sqlcode number(20);
begin

SELECT COUNT(*) INTO V_IGNORE_PK_CHECK


FROM SYS_LOAD_INTERFACE_RULES WHERE INTERFACE_ID =P_INTERFACE_ID
AND BUSINESS_RULE_ID = 'PK_CHECK'
AND RULE_TYPE ='IGNORE';
IF V_IGNORE_PK_CHECK =0 THEN

FOR X IN S4 LOOP
IF X.pkcheck IS not NULL THEN
v_SOURCE_TABLE_NAME := x.SOURCE_TABLE_NAME;
if v_pk_columns is null then
v_pk_columns := X.pkcheck ;
else
v_pk_columns := v_pk_columns ||','|| X.pkcheck ;
end if;
else
if v_db_pk_column is null then
v_db_pk_column := X.db_pk_column ;
else
v_db_pk_column := v_db_pk_column ||','|| X.db_pk_column ;
end if;

END IF;

END LOOP;
IF V_LOAD_HEADER.WHERE_CONDITION IS NOT NULL THEN
V_WHERE_CONDITION := ' WHERE '||V_LOAD_HEADER.WHERE_CONDITION;
END IF;

ZZZ_TEST('S4 CURSOR PK Check : '||v_pk_columns||';'||


v_sql_pk_check,V_LOG_FOOTPRINT);
if v_pk_columns is not null then
v_sql_pk_check:= v_sql_pk_check ||v_pk_columns || ' , count(*)
from '||
v_SOURCE_TABLE_NAME ||
V_WHERE_CONDITION || ' group by '||
v_pk_columns ||' having
count(*)>1' ;
ZZZ_TEST('S4 CURSOR PK Check STARTS : '||
v_sql_pk_check,V_LOG_FOOTPRINT);
begin
execute immediate 'select count(*) from ( ' ||v_sql_pk_check
||')' into v_count;
exception
when others then
v_sqlcode:= SQLCODE;
if v_sqlcode=-22818 then --- SQLERRM
v_count:= 1;
v_raise_error:=0;

SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,v_sql_pk_check,v_count,'<B>Not an Error
message :</B>'||'Primary key Check cannot be made as the fields are dynamic data
per Query used.');
-- V_ERRORS_FOUND := NVL(V_ERRORS_FOUND,0)+1; -- NOT TO
LOG AS ERROR.
end if;
END;

if v_count >1 then


v_raise_error:=4;
V_SQL:='Check "Load Interface Setup Detail" tab ';
SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,
v_sql_pk_check,
v_count,
'Primary key Violated
: <font color= "Red"><B>'|| v_pk_columns||'</B></font>');
V_ERRORS_FOUND := NVL(V_ERRORS_FOUND,0)+1;
end if;

IF V_ERRORS_FOUND >0 THEN


V_ERRORS_FOUND_TOTAL := NVL(V_ERRORS_FOUND_TOTAL,0) +
V_ERRORS_FOUND;
IF V_ERROR_LOGS IS NULL THEN V_ERROR_LOGS :='Data Issues wrt
Primary Key Violation';
ELSE V_ERROR_LOGS:=
V_ERROR_LOGS ||',Data Issues wrt Primary Key Violation';
END IF;
END IF;
elsif v_pk_columns is null and v_db_pk_column is not null then
V_ERRORS_FOUND := NVL(V_ERRORS_FOUND,0)+1;
V_ERRORS_FOUND_TOTAL := NVL(V_ERRORS_FOUND_TOTAL,0) + V_ERRORS_FOUND;

v_raise_error:=41;
V_SQL:='Check "Load Interface Setup Detail" tab ';
SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,
v_db_pk_column||' should be
properly mapped to source.',
v_count,
'Primary key Setup not Found :
<font color= "Red"><B>'|| v_db_pk_column||'</B></font>');

end if;
END IF; -- IGNORE PK CHECK.
end;
V_ERRORS_FOUND :=0;
V_SOURCE_FIELD_NAME_FORCLEANUP:= NULL;

if v_raise_error>0 then
commit;
RAISE OUT_ERRORS; --- before starting to check data related issues
end if;
-----------------------------------------------------------------------------------
-------------------------
---------------------------------------VALIDATIONS CHECKS
--------------------------------------------------
-----------------------------------------------------------------------------------
-------------------------
ZZZ_TEST('C2 CURSOR Validation LOOP STARTS : ',V_LOG_FOOTPRINT);
V_SOURCE_FIELD_NAME_FORCLEANUP:= NULL;
FOR J IN C2 LOOP
BEGIN

SELECT IGNORE_DESTINATION
INTO V_IGNORE_DESTINATION
FROM SYS_LOAD_INTERFACE_DETAIL
WHERE INTERFACE_ID = P_INTERFACE_ID
AND DESTINATION_FIELD_NAME = J.FIELD_NAME;
EXCEPTION
WHEN NO_DATA_FOUND THEN
ZZZ_TEST('C2 CURSOR Validation LOOP STARTS :
SETUP_ERRORS_MISSING_MAPPING',V_LOG_FOOTPRINT);
RAISE SETUP_ERRORS_MISSING_MAPPING;
END;
IF V_IGNORE_DESTINATION ='N' THEN
BEGIN
V_CNT:= 0;
BEGIN
SELECT SOURCE_FIELD_NAME ,
SOURCE_TABLE_NAME ,
DESTINATION_TABLE_NAME ,
NVL(NON_DATABASE_SOURCE_COLUMN ,'N'),
SOURCE_FIELD_NAME_FOR_CLEANUP,
DESTINATION_FIELD_VALUE
INTO V_SOURCE_FIELD_NAME ,
V_SOURCE_TABLE_NAME ,
V_DESTINATION_TABLE_NAME ,
V_NON_DATABASE_SOURCE_COLUMN ,
V_SOURCE_FIELDNAME_FOR_CLEANUP,
V_DESTINATION_FIELD_VALUE
FROM SYS_LOAD_INTERFACE_DETAIL
WHERE INTERFACE_ID =J.INTERFACE_ID
AND DESTINATION_FIELD_NAME=J.FIELD_NAME;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_SOURCE_FIELD_NAME := NULL;
END;
BEGIN
SELECT 'Y'
INTO V_FIELD_IS_CAPS
FROM SYS_LOAD_INTERFACE_RULES
WHERE INTERFACE_ID =J.INTERFACE_ID
AND NVL(ACTIVE_FLAG,'N')='Y'
AND RULE_CATEGORY='Validation' AND RULE_TYPE='Field is caps'

AND FIELD_NAME =J.FIELD_NAME;


EXCEPTION
WHEN OTHERS THEN NULL;
V_FIELD_IS_CAPS:='N';
END;
IF V_NON_DATABASE_SOURCE_COLUMN ='Y' THEN
SELECT 'NVL('||NVL(V_SOURCE_FIELDNAME_FOR_CLEANUP,'NULL') ||','||
NVL2(V_DESTINATION_FIELD_VALUE,
CHR(39)||
V_DESTINATION_FIELD_VALUE||CHR(39),
'NULL')||')'
INTO V_FIELD_TO_CHECK
FROM DUAL;
ELSE

SELECT NVL(V_SOURCE_FIELD_NAME ,NVL2(V_DESTINATION_FIELD_VALUE,


CHR(39)||
V_DESTINATION_FIELD_VALUE||CHR(39),
'NULL'))
INTO V_FIELD_TO_CHECK
FROM DUAL;
END IF;

IF J.RULE_CATEGORY='Validation' AND J.RULE_TYPE='Check Field


Validation' THEN
IF V_FIELD_TO_CHECK IS NOT NULL THEN
IF J.REFERENCE3 IS NOT NULL THEN
IF V_LOAD_HEADER.WHERE_CONDITION IS NOT NULL THEN
V_SQL := 'SELECT COUNT(1) '||J.FIELD_NAME||' FROM '||
V_LOAD_HEADER.SOURCE_USER_ID||'.'||V_LOAD_HEADER.SOURCE_TABLE_NAME||' WHERE '||
V_LOAD_HEADER.WHERE_CONDITION||' AND '
|| V_FIELD_TO_CHECK||' IS NOT NULL ' || ' AND '
|| CASE WHEN V_FIELD_IS_CAPS ='Y' THEN ' UPPER('||
V_FIELD_TO_CHECK||')' ELSE V_FIELD_TO_CHECK END ||' NOT IN (SELECT '||
J.REFERENCE2||' FROM '||J.REFERENCE1||' WHERE '||
REPLACE(REPLACE(REPLACE ( UPPER(J.REFERENCE3 ),'" &
','' ),'.TEXT & "',''),V_DESTINATION_TABLE_NAME||'_','')||')';

ELSE
V_SQL := 'SELECT COUNT(1) '||J.FIELD_NAME||' FROM '||
V_LOAD_HEADER.SOURCE_USER_ID||'.'||V_LOAD_HEADER.SOURCE_TABLE_NAME||' WHERE '||
V_FIELD_TO_CHECK
||' IS NOT NULL ' ||' AND '
|| CASE WHEN V_FIELD_IS_CAPS ='Y' THEN ' UPPER('||
V_FIELD_TO_CHECK||')' ELSE V_FIELD_TO_CHECK END ||' NOT IN (SELECT '||
J.REFERENCE2||' FROM '||J.REFERENCE1||' WHERE '||
REPLACE(REPLACE(REPLACE ( UPPER(J.REFERENCE3 ),'" &
','' ),'.TEXT & "',''),V_DESTINATION_TABLE_NAME||'_','')||')';
END IF;
ELSE
IF V_LOAD_HEADER.WHERE_CONDITION IS NOT NULL THEN
V_SQL := 'SELECT COUNT(1) '||J.FIELD_NAME||' FROM '||
V_LOAD_HEADER.SOURCE_USER_ID||'.'||V_LOAD_HEADER.SOURCE_TABLE_NAME||' WHERE '||
V_LOAD_HEADER.WHERE_CONDITION||' AND '||V_FIELD_TO_CHECK||' IS NOT NULL '
|| ' AND '|| CASE WHEN V_FIELD_IS_CAPS ='Y' THEN '
UPPER('||V_FIELD_TO_CHECK||')' ELSE V_FIELD_TO_CHECK END ||' NOT IN (SELECT '||
J.REFERENCE2||' FROM '||J.REFERENCE1||')';
ELSE
V_SQL := 'SELECT COUNT(1) '||J.FIELD_NAME||' FROM '||
V_LOAD_HEADER.SOURCE_USER_ID||'.'||V_LOAD_HEADER.SOURCE_TABLE_NAME||' WHERE '||
V_FIELD_TO_CHECK ||' IS NOT NULL '
||' AND ' || CASE WHEN V_FIELD_IS_CAPS ='Y' THEN '
UPPER('||V_FIELD_TO_CHECK||')' ELSE V_FIELD_TO_CHECK END ||' NOT IN (SELECT '||
J.REFERENCE2||' FROM '||J.REFERENCE1||')';
END IF;
END IF;

ZZZ_TEST('C2 Validation Loop :V_SQL '||V_FIELD_IS_CAPS||';'||


V_SQL,V_LOG_FOOTPRINT);

EXECUTE IMMEDIATE V_SQL INTO V_CNT;


END IF;

IF V_CNT > 0 THEN


SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,
V_SQL,
V_CNT,
'Validation failed for
field <font color= "Red"><B>'|| J.FIELD_NAME||'</B></font>');
V_ERRORS_FOUND := NVL(V_ERRORS_FOUND,0)+1;

COMMIT;
END IF;
END IF;--VALIDATION RULE END

EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL ; ZZZ_TEST('C2 CURSOR Validation
NDF :'||SQLERRM ||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,V_LOG_FOOTPRINT);
WHEN OTHERS THEN
NULL ; ZZZ_TEST('C2 CURSOR Validation
OTH :'||SQLERRM ||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,V_LOG_FOOTPRINT);
END;
END IF; --- IGNORE DESTINATION

END LOOP;

IF V_ERRORS_FOUND >0 THEN


V_ERRORS_FOUND_TOTAL := NVL(V_ERRORS_FOUND_TOTAL,0) + V_ERRORS_FOUND;
IF V_ERROR_LOGS IS NULL THEN V_ERROR_LOGS :='Errors encountered for
Validations';
ELSE V_ERROR_LOGS:= V_ERROR_LOGS
||',Validations';
END IF;
END IF;
V_ERRORS_FOUND :=0;
V_SOURCE_FIELD_NAME_FORCLEANUP:= NULL;
-----------------------------------------------------------------------------------
-------------------------
---------------------------------------MANDATORY CHECKS
----------------------------------------------------
-----------------------------------------------------------------------------------
-------------------------

ZZZ_TEST('C2 CURSOR Mandatory LOOP STARTS : ',V_LOG_FOOTPRINT);

FOR J IN C2 LOOP

SELECT IGNORE_DESTINATION
INTO V_IGNORE_DESTINATION
FROM SYS_LOAD_INTERFACE_DETAIL
WHERE INTERFACE_ID =P_INTERFACE_ID
AND DESTINATION_FIELD_NAME = J.FIELD_NAME;

IF V_IGNORE_DESTINATION ='N' THEN


DECLARE

AA VARCHAR2(100);
BB VARCHAR2(100);
BEGIN

V_CNT:= 0;
V_SQL:=NULL;

IF J.RULE_CATEGORY='Mandatory' AND J.RULE_TYPE='Mandatory' THEN


V_FLAG:= 'Begining Checks for Field Name: ' ||J.FIELD_NAME;
SELECT SOURCE_FIELD_NAME ,
SOURCE_FIELD_NAME_FOR_CLEANUP ,
DESTINATION_FIELD_NAME ,
DESTINATION_FIELD_VALUE ,
NVL(NON_DATABASE_SOURCE_COLUMN,'N')
INTO V_SOURCE_FIELD_NAME ,
V_SOURCE_FIELD_NAME_FORCLEANUP,
V_DESTINATION_FIELD_NAME ,
V_DESTINATION_FIELD_VALUE ,
V_NON_DATABASE_SOURCE_COLUMN
FROM SYS_LOAD_INTERFACE_DETAIL
WHERE INTERFACE_ID = P_INTERFACE_ID
AND DESTINATION_FIELD_NAME = J.FIELD_NAME;

AA := V_LOAD_HEADER.SOURCE_TABLE_NAME ;
BB := 'SYS_LOAD_INTERFACE_DETAIL' ;

IF V_SOURCE_FIELD_NAME_FORCLEANUP IS NOT NULL THEN


V_SOURCE_FIELD_NAME_TEMP:= REPLACE
(V_SOURCE_FIELD_NAME_FORCLEANUP,V_SOURCE_FIELD_NAME,AA||'.'||V_SOURCE_FIELD_NAME);

ELSE

SELECT NVL2(V_SOURCE_FIELD_NAME,AA||'.'||V_SOURCE_FIELD_NAME,'NULL')
INTO V_SOURCE_FIELD_NAME_TEMP
FROM DUAL;
END IF;

if V_NON_DATABASE_SOURCE_COLUMN ='Y' then


IF V_SOURCE_FIELD_NAME_FORCLEANUP IS NOT NULL THEN
V_SOURCE_FIELD_NAME_TEMP:= V_SOURCE_FIELD_NAME_FORCLEANUP;
ELSE
V_SOURCE_FIELD_NAME_TEMP:= 'NULL';
END IF;
end if;

V_SQL := 'SELECT count(1) '||J.FIELD_NAME||' FROM '||


V_LOAD_HEADER.SOURCE_USER_ID||'.'||V_LOAD_HEADER.SOURCE_TABLE_NAME
||' '||AA||' ,SYS_LOAD_INTERFACE_DETAIL '||BB ||' WHERE '||
BB||'.INTERFACE_ID ='||CHR(39)||J.INTERFACE_ID||CHR(39)||
' AND nvl('||V_SOURCE_FIELD_NAME_TEMP||',NVL2('||
BB||'.DESTINATION_FIELD_VALUE,CHR(39)||'||BB||'.DESTINATION_FIELD_VALUE||
CHR(39),NULL)) IS NULL '||
' AND '||BB||'.DESTINATION_FIELD_NAME = '||CHR(39)||J.FIELD_NAME||
CHR(39);

/* V_SQL := 'SELECT count(1) FROM '||V_LOAD_HEADER.SOURCE_USER_ID||'.'||


V_LOAD_HEADER.SOURCE_TABLE_NAME
||' A ,SYS_LOAD_INTERFACE_DETAIL b WHERE B.INTERFACE_ID ='||
CHR(39)||J.INTERFACE_ID||CHR(39)||
' AND nvl('||
V_SOURCE_FIELD_NAME_TEMP||',NVL2(B.DESTINATION_FIELD_VALUE,CHR(39)||
B.DESTINATION_FIELD_VALUE||CHR(39),NULL)) IS NULL '||
' AND B.DESTINATION_FIELD_NAME = '||CHR(39)||J.FIELD_NAME||CHR(39);

*/

IF V_LOAD_HEADER.WHERE_CONDITION IS NOT NULL THEN


IF INSTR (V_SQL,'WHERE') >1 THEN
V_SQL := V_SQL||' AND '||V_LOAD_HEADER.WHERE_CONDITION;
ELSE
V_SQL := V_SQL||' WHERE '||V_LOAD_HEADER.WHERE_CONDITION;
END IF;
END IF;

ZZZ_TEST('C2 Mandatory lOOP :V_SQL '||


V_SQL,V_LOG_FOOTPRINT);
EXECUTE IMMEDIATE V_SQL INTO V_CNT;

IF V_CNT > 0 THEN


SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,V_SQL,V_CNT,'Field value
cannot be null for <font color= "Red"><B>'|| J.FIELD_NAME ||'</B></font> / Default
values not set' );
V_ERRORS_FOUND := NVL(V_ERRORS_FOUND,0)+1;
-- ZZZ_TEST('C2 Mandatory lOOP :V_SQL '||
V_SQL,V_LOG_FOOTPRINT);

COMMIT;
END IF;
END IF;--MANDATORY
END;
--ZZZ_TEST('C4 OTH: '||K.EXECUTE_SQLS||SQLERRM ||
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,V_LOG_FOOTPRINT);

END IF; -- COLUMN IS MARKED INACTIVE


END LOOP;
IF V_ERRORS_FOUND >0 THEN
V_ERRORS_FOUND_TOTAL := NVL(V_ERRORS_FOUND_TOTAL,0) + V_ERRORS_FOUND;
IF V_ERROR_LOGS IS NULL THEN V_ERROR_LOGS :=' Errors encountered
for missing Mandatory fields';
ELSE V_ERROR_LOGS:= V_ERROR_LOGS ||',missing
Mandatory fields';END IF;

END IF;
V_ERRORS_FOUND:=0;
V_SOURCE_FIELD_NAME_FORCLEANUP:= NULL;
-----------------------------------------------------------------------------------
-------------------------
--------------------------------------- IS NUMBER CHECKS
---------------------------------------------------
-----------------------------------------------------------------------------------
-------------------------

ZZZ_TEST('C6 CURSOR Number check LOOP STARTS : ',V_LOG_FOOTPRINT);


FOR X IN C6 LOOP

SELECT COUNT(*) INTO V_IGNORE_NUM_CHECK


FROM SYS_LOAD_INTERFACE_RULES
WHERE INTERFACE_ID = P_INTERFACE_ID
AND BUSINESS_RULE_ID = 'NUMBER_CHECK'
AND RULE_TYPE ='IGNORE';

IF V_IGNORE_NUM_CHECK =0 THEN

BEGIN
V_CNT:= 0;
V_SQL:=NULL;
IF NVL(x.SOURCE_FIELD_NAME,x.DESTINATION_FIELD_VALUE) IS NOT NULL THEN
IF NVL(X.NON_DATABASE_SOURCE_COLUMN,'N') <> 'Y' THEN
IF X.SOURCE_FIELD_NAME_FOR_CLEANUP IS NOT NULL THEN
V_SQL := 'select count(1) '||
X.DESTINATION_FIELD_NAME||' from '||X.SOURCE_TABLE_NAME||' where ISNUMBER(NVL2('||
NVL(X.SOURCE_FIELD_NAME_FOR_CLEANUP,'NULL')||',' ||
NVL(X.SOURCE_FIELD_NAME_FOR_CLEANUP,'NULL')||','||
NVL(x.DESTINATION_FIELD_VALUE,'NULL')||') =0 and '

||'NVL2('||NVL(X.SOURCE_FIELD_NAME_FOR_CLEANUP,'NULL')||',' ||
NVL(X.SOURCE_FIELD_NAME_FOR_CLEANUP,'NULL')||','||
NVL(x.DESTINATION_FIELD_VALUE,'NULL') ||') is not null';
ELSE
V_SQL := 'select count(1) '||
X.DESTINATION_FIELD_NAME||' from '||X.SOURCE_TABLE_NAME||' where isnumber(NVL2('||
NVL(X.SOURCE_FIELD_NAME,'NULL')||','||NVL(X.SOURCE_FIELD_NAME,'NULL')||','||
NVL(x.DESTINATION_FIELD_VALUE,'NULL')||' )) =0 and '

||'NVL2('||NVL(X.SOURCE_FIELD_NAME,'NULL')||','||
NVL(X.SOURCE_FIELD_NAME,'NULL')||','||NVL(x.DESTINATION_FIELD_VALUE,'NULL')||' )is
not null';
END IF;
ELSE

V_SQL := 'select count(1) '||


X.DESTINATION_FIELD_NAME||' from '||X.SOURCE_TABLE_NAME||' where ISNUMBER(NVL2('||
NVL(X.SOURCE_FIELD_NAME_FOR_CLEANUP,'NULL')||',' ||
NVL(X.SOURCE_FIELD_NAME_FOR_CLEANUP,'NULL')||','||
NVL(x.DESTINATION_FIELD_VALUE,'NULL')||' )) =0 and '

||'NVL2('||NVL(X.SOURCE_FIELD_NAME_FOR_CLEANUP,'NULL')||',' ||
NVL(X.SOURCE_FIELD_NAME_FOR_CLEANUP,'NULL')||','||
NVL(x.DESTINATION_FIELD_VALUE,'NULL')||' ) is not null';
END IF;
ZZZ_TEST('C6 Check lOOP :V_SQL For Destination
field :'||x.DESTINATION_FIELD_NAME||'. '|| V_SQL,V_LOG_FOOTPRINT);
-- IF V_SQL IS NOT NULL THEN
EXECUTE IMMEDIATE V_SQL INTO V_CNT;
-- END IF;
IF V_CNT > 0 THEN
BEGIN
IF X.SOURCE_FIELD_NAME_FOR_CLEANUP IS NOT NULL THEN
V_SQL_STRING:= ' select listagg(check_col,'||CHR(39)||','||
CHR(39)||
') WITHIN GROUP (order by check_col)as error_data
from ( select distinct '
||X.SOURCE_FIELD_NAME_FOR_CLEANUP|| ' as
check_col from '||X.SOURCE_TABLE_NAME
||' where isnumber('||
X.SOURCE_FIELD_NAME_FOR_CLEANUP|| ' ) =0 and '
||X.SOURCE_FIELD_NAME_FOR_CLEANUP|| ' is not null
) WHERE ROWNUM <=10';
ELSE
V_SQL_STRING:= ' select listagg(check_col,'||CHR(39)||','||
CHR(39)||
') WITHIN GROUP (order by check_col)as error_data
from ( select distinct '
||X.SOURCE_FIELD_NAME|| ' as check_col from '||
X.SOURCE_TABLE_NAME
||' where isnumber('||X.SOURCE_FIELD_NAME|| ' )
=0 and '
||X.SOURCE_FIELD_NAME|| ' is not null ) WHERE
ROWNUM <=10';
END IF;
ZZZ_TEST('C6 numeric validations lOOP :v_sql_string '||
V_SQL_STRING,V_LOG_FOOTPRINT);

IF V_LOAD_HEADER.WHERE_CONDITION IS NOT NULL THEN


IF INSTR (V_SQL_STRING,'WHERE') >1 THEN
V_SQL_STRING := V_SQL_STRING||' AND '||V_LOAD_HEADER.WHERE_CONDITION;
ELSE
V_SQL_STRING := V_SQL_STRING||' WHERE '||V_LOAD_HEADER.WHERE_CONDITION;
END IF;
END IF;

EXECUTE IMMEDIATE V_SQL_STRING INTO V_SQL_STRING_RESULT;

EXCEPTION
WHEN OTHERS THEN
NULL ;
END;

SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,V_SQL,V_CNT,
X.SOURCE_FIELD_NAME ||' Field should be numeric.'||'( '||
V_SQL_STRING_RESULT||' )' );
V_ERRORS_FOUND := NVL(V_ERRORS_FOUND,0)+1;
ZZZ_TEST('C6 Check data lOOP :V_SQL '||
V_SQL,V_LOG_FOOTPRINT);
COMMIT;
END IF; -- number field
END IF; --IF NVL(X.SOURCE_FIELD_NAME,X.DESTINATION_FIELD_VALUE) IS NOT
NULL THEN

END;
END IF; -- IGNORE NUMCHECK
END LOOP;

IF V_ERRORS_FOUND>0 THEN
V_ERRORS_FOUND_TOTAL := NVL(V_ERRORS_FOUND_TOTAL,0) + V_ERRORS_FOUND;
IF V_ERROR_LOGS IS NULL THEN V_ERROR_LOGS :=' Errors encountered for numeric check
on data';
ELSE V_ERROR_LOGS:= V_ERROR_LOGS ||',Numeric check on data'; END IF;

END IF;
V_ERRORS_FOUND:=0;

V_SOURCE_FIELD_NAME_FORCLEANUP:= NULL;
-----------------------------------------------------------------------------------
-------------------------
--------------------------------------- IS DATE CHECKS
---------------------------------------------------
-----------------------------------------------------------------------------------
-------------------------
ZZZ_TEST('C7 CURSOR DATE check LOOP STARTS : ',V_LOG_FOOTPRINT);
FOR X IN C7 LOOP
BEGIN
V_CNT:= 0;
V_SQL:=NULL;
IF NVL(x.SOURCE_FIELD_NAME,x.DESTINATION_FIELD_VALUE) IS NOT NULL THEN
BEGIN
--V_SOURCE_FIELD_NAME_FORCLEANUP :=X.SOURCE_FIELD_NAME_FOR_CLEANUP;

IF X.NON_DATABASE_SOURCE_COLUMN ='Y' THEN


V_SQL := 'select count(1) '||X.DESTINATION_FIELD_NAME||' from
DUAL where ISDATE_FOR_LOADING('||CHR(39)||X.DESTINATION_FIELD_VALUE||CHR(39)||','||
CHR(39)||X.FORMAT_MODEL_DEFAULT_VALUE||CHR(39)||' ) =0 and '
||CHR(39)||
X.DESTINATION_FIELD_VALUE||CHR(39)|| ' is not null';
ELSE
IF X.SOURCE_FIELD_NAME_FOR_CLEANUP IS NOT NULL THEN
V_SQL := 'select count(1) '||X.DESTINATION_FIELD_NAME||'
from '||X.SOURCE_TABLE_NAME||' where ISDATE_FOR_LOADING('||
X.SOURCE_FIELD_NAME_FOR_CLEANUP||','||CHR(39)||X.FORMAT_MODEL||CHR(39)||' ) =0 and
'
||
X.SOURCE_FIELD_NAME_FOR_CLEANUP|| ' is not null';

ELSIF X.SOURCE_FIELD_NAME IS NOT NULL THEN


V_SQL := 'select count(1) '||X.DESTINATION_FIELD_NAME||'
from '||X.SOURCE_TABLE_NAME||' where ISDATE_FOR_LOADING('||
X.SOURCE_FIELD_NAME||','||CHR(39)||X.FORMAT_MODEL||CHR(39)||' ) =0 and '
||X.SOURCE_FIELD_NAME|| '
is not null';

ELSIF X.DESTINATION_FIELD_VALUE IS NOT NULL THEN


V_SQL := 'select count(1) '||X.DESTINATION_FIELD_NAME
||' from '||X.SOURCE_TABLE_NAME
||' where ISDATE_FOR_LOADING('||CHR(39)||
X.DESTINATION_FIELD_VALUE||CHR(39)||','||CHR(39)||X.FORMAT_MODEL_DEFAULT_VALUE||
CHR(39)||' ) =0 and '
||CHR(39)||X.DESTINATION_FIELD_VALUE||CHR(39)|| ' is not
null';

END IF;
END IF;
END;
ZZZ_TEST('C7 Check lOOP :V_SQL '||
V_SQL,V_LOG_FOOTPRINT);
IF V_SQL IS NOT NULL THEN
EXECUTE IMMEDIATE V_SQL INTO V_CNT;
END IF;

IF V_CNT > 0 THEN


BEGIN
IF X.SOURCE_FIELD_NAME_FOR_CLEANUP IS NOT NULL THEN
V_SQL_STRING:= ' select listagg(check_col,'||
CHR(39)||','||CHR(39)||
') WITHIN GROUP (order by check_col) as
error_data from ( select distinct '
||X.SOURCE_FIELD_NAME_FOR_CLEANUP|| ' as
check_col from '||X.SOURCE_TABLE_NAME
||' where ISDATE_FOR_LOADING('||
X.SOURCE_FIELD_NAME_FOR_CLEANUP ||','||
CHR(39)|| X.FORMAT_MODEL||CHR(39)
|| ' ) =0 and '||
X.SOURCE_FIELD_NAME_FOR_CLEANUP
|| ' is not null ) WHERE ROWNUM <=2';

ELSE
V_SQL_STRING:= ' select listagg(check_col,'||
CHR(39)||','||CHR(39)||
') WITHIN GROUP (order by check_col) as
error_data from ( select distinct '
||X.SOURCE_FIELD_NAME|| ' as check_col
from '||X.SOURCE_TABLE_NAME
||' where ISDATE_FOR_LOADING('||
X.SOURCE_FIELD_NAME
||','||CHR(39)|| X.FORMAT_MODEL||CHR(39)

|| ' ) =0 and '||X.SOURCE_FIELD_NAME

|| ' is not null ) WHERE ROWNUM <=2';

END IF;
ZZZ_TEST('C7 Check lOOP :v_sql_string '||
V_SQL_STRING,V_LOG_FOOTPRINT);

IF V_LOAD_HEADER.WHERE_CONDITION IS NOT NULL THEN


IF INSTR (V_SQL_STRING,'WHERE') >1 THEN
V_SQL_STRING := V_SQL_STRING||' AND '||V_LOAD_HEADER.WHERE_CONDITION;
ELSE
V_SQL_STRING := V_SQL_STRING||' WHERE '||V_LOAD_HEADER.WHERE_CONDITION;
END IF;
END IF;

EXECUTE IMMEDIATE V_SQL_STRING INTO V_SQL_STRING_RESULT;

EXCEPTION
WHEN OTHERS THEN
NULL ;
END;
SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,V_SQL,V_CNT,'Use Date Format
mask <font color= "Blue">( DD-MON-YYYY accepted by default )</font> for <font
color= "Red"><B>'||X.SOURCE_FIELD_NAME ||'</B></font> ('||
V_SQL_STRING_RESULT||')' );
V_ERRORS_FOUND := NVL(V_ERRORS_FOUND,0)+1;
--ZZZ_TEST('C7 Check lOOP :V_SQL '||
V_SQL||' ;'||v_errors_found,V_LOG_FOOTPRINT);
COMMIT;
END IF; -- number field
END IF; -- IF NVL(X.SOURCE_FIELD_NAME,X.DESTINATION_FIELD_VALUE) IS NOT
NULL THEN
END;

END LOOP;
-----------------------------------------------------------------------------------
-------------------------
-----------------------------------------------------------------------------------
-------------------------
-----------------------------------------------------------------------------------
-------------------------

IF V_ERRORS_FOUND>0 THEN
V_ERRORS_FOUND_TOTAL := NVL(V_ERRORS_FOUND_TOTAL,0) + V_ERRORS_FOUND;
IF V_ERROR_LOGS IS NULL THEN V_ERROR_LOGS :=' Errors encountered for Date check on
data';
ELSE V_ERROR_LOGS:= V_ERROR_LOGS ||',Date check on data'; END IF;

END IF;
V_ERRORS_FOUND:=0;

V_SOURCE_FIELD_NAME_FORCLEANUP:= NULL;

IF V_ERROR_LOGS IS NULL THEN


V_ERROR_LOGS := 'All Good';

-----------------------------------------------------------------------------------
-------------------------
--------------------------------------- PRE SQLS
----------------------------------------------------------
-----------------------------------------------------------------------------------
-------------------------

ZZZ_TEST('C5 CURSOR Pre sql LOOP STARTS : ',V_LOG_FOOTPRINT);


FOR L IN C5 LOOP

BEGIN

EXECUTE IMMEDIATE L.EXECUTE_SQLS;

EXCEPTION
WHEN OTHERS THEN
ZZZ_TEST('C5 OTH:'||SQLERRM ||
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,V_LOG_FOOTPRINT);
SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,L.EXECUTE_SQLS,L.LINE_NO,'Error
in Pre Sql at line ' || L.LINE_NO );
V_ERRORS_FOUND := NVL(V_ERRORS_FOUND,0)+1;

COMMIT;
END;
ZZZ_TEST('C2 PRESQL Loop: '||L.LINE_NO,V_LOG_FOOTPRINT);
END LOOP;

/*********************************************************/
--
--- IF PRE SQL FAILS, STOP THE INSERT -----------------
--
/************************************************************/

IF V_ERRORS_FOUND > 0 THEN


V_ERRORS_FOUND_TOTAL := NVL(V_ERRORS_FOUND_TOTAL,0) + V_ERRORS_FOUND;
IF V_ERROR_LOGS IS NULL THEN V_ERROR_LOGS :=' Errors encountered for Pre-
SQL scripts';
ELSE V_ERROR_LOGS:= V_ERROR_LOGS ||',Pre-SQL
scripts';END IF;
END IF;

V_ERRORS_FOUND:=0;

-----------------------------------------------------------------------------------
-------------------------
--------------------------------------- INSERT
BEGINS-------------------------------------------------------
-----------------------------------------------------------------------------------
-------------------------
ZZZ_TEST('C3 CURSOR Insert LOOP STARTS :'||V_INSERT,V_LOG_FOOTPRINT);

SELECT NVL(OVERWRITE_REQUIRED,'N')
INTO V_OVERWRITE
FROM SYS_LOAD_INTERFACE_HEADER
WHERE INTERFACE_ID =P_INTERFACE_ID;
IF V_OVERWRITE ='Y' THEN
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE '||V_LOAD_HEADER.DESTINATION_TABLE_NAME;

EXCEPTION
WHEN OTHERS THEN
BEGIN
EXECUTE IMMEDIATE 'delete from '||V_LOAD_HEADER.DESTINATION_TABLE_NAME;
COMMIT;
EXCEPTION
WHEN OTHERS THEN NULL;
END;
END;
END IF;
V_FLAG := '3';
V_INSERT := 'INSERT INTO '||V_LOAD_HEADER.DESTINATION_TABLE_NAME||'( ';
V_SELECT := 'SELECT ';

FOR K IN C3 LOOP
V_SOURCE_FIELD_NAME_FORCLEANUP:= null;
SELECT COUNT(1)
INTO V_CAPS
FROM SYS_LOAD_INTERFACE_RULES
WHERE INTERFACE_ID =P_INTERFACE_ID
AND NVL(ACTIVE_FLAG,'N')= 'Y'
AND RULE_CATEGORY = 'Validation'
AND RULE_TYPE = 'Field is caps'
AND FIELD_NAME = K.SOURCE_FIELD_NAME;

IF V_CAPS>0 THEN
V_SOURCE_FIELD_NAME := 'UPPER(' || K.SOURCE_FIELD_NAME || ')';
IF K.SOURCE_FIELD_NAME_FOR_CLEANUP IS NOT NULL THEN
V_SOURCE_FIELD_NAME_FORCLEANUP :='UPPER(' ||
K.SOURCE_FIELD_NAME_FOR_CLEANUP|| ')';
END IF;
ELSE
V_SOURCE_FIELD_NAME :=K.SOURCE_FIELD_NAME;
V_SOURCE_FIELD_NAME_FORCLEANUP :=K.SOURCE_FIELD_NAME_FOR_CLEANUP;
END IF;

IF K.SOURCE_FIELD_NAME LIKE 'DEFAULT(%' THEN


IF K.DESTINATION_TYPE LIKE 'NUMBER%' THEN
V_SOURCE_FIELD_NAME :=
RTRIM(LTRIM(LTRIM(K.SOURCE_FIELD_NAME,'DEFAULT'),'('),')');
ELSE
V_SOURCE_FIELD_NAME := ''''||
RTRIM(LTRIM(LTRIM(K.SOURCE_FIELD_NAME,'DEFAULT'),'('),')')||'''';
END IF;
END IF;

IF NVL(K.SOURCE_FIELD_NAME,K.DESTINATION_FIELD_VALUE) IS NOT NULL THEN

IF LENGTH(V_INSERT||K.DESTINATION_FIELD_NAME) <=32000 THEN

V_INSERT := V_INSERT||K.DESTINATION_FIELD_NAME||',';
ELSE

V_INSERT1 := NVL(V_INSERT1,' ')||K.DESTINATION_FIELD_NAME ||',' ;

END IF;

SELECT DATA_TYPE
INTO V_DEST_DATA_TYPE
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = V_LOAD_HEADER.DESTINATION_TABLE_NAME
AND COLUMN_NAME = K.DESTINATION_FIELD_NAME;
SELECT DESTINATION_FIELD_VALUE,
FORMAT_MODEL_DEFAULT_VALUE,
NVL(NON_DATABASE_SOURCE_COLUMN,'N')
INTO V_DFLT_DESTINATION_FIELD_VALUE,
V_DFLT_FORMAT_MODEL,
V_NON_DATABASE_SOURCE_COLUMN
FROM SYS_LOAD_INTERFACE_DETAIL
WHERE INTERFACE_ID = P_INTERFACE_ID
AND DESTINATION_FIELD_NAME = K.DESTINATION_FIELD_NAME;

IF V_NON_DATABASE_SOURCE_COLUMN ='Y' THEN


IF V_SOURCE_FIELD_NAME_FORCLEANUP IS NOT NULL THEN
SELECT V_SELECT || ' NVL2('||
V_SOURCE_FIELD_NAME_FORCLEANUP||','
||
V_SOURCE_FIELD_NAME_FORCLEANUP||','
||
NVL2(V_DFLT_DESTINATION_FIELD_VALUE,
CHR(39)||
V_DFLT_DESTINATION_FIELD_VALUE||CHR(39),
'NULL'
)
||') AS '||
K.SOURCE_FIELD_NAME||','
INTO V_SELECT FROM DUAL;
ELSE
V_SELECT := V_SELECT || NVL(CHR(39)||
V_DFLT_DESTINATION_FIELD_VALUE||CHR(39),'NULL') ||' AS '||K.SOURCE_FIELD_NAME||',';

END IF;

ELSE
IF V_SOURCE_FIELD_NAME_FORCLEANUP IS NOT NULL THEN
IF V_DEST_DATA_TYPE ='NUMBER' THEN
V_SOURCE_FIELD_NAME := 'TO_NUMBER('||
V_SOURCE_FIELD_NAME_FORCLEANUP||')' ; -- V_SOURCE_FIELD_NAME_FORCLEANUP
ELSIF V_DEST_DATA_TYPE ='DATE' AND K.FORMAT_MODEL IS
NOT NULL THEN
V_SOURCE_FIELD_NAME := 'TO_DATE('||
V_SOURCE_FIELD_NAME_FORCLEANUP||','||CHR(39)||K.FORMAT_MODEL||CHR(39) ||')' ;
ELSE
NULL;
END IF;
ELSE
IF V_DEST_DATA_TYPE ='NUMBER' THEN
V_SOURCE_FIELD_NAME := 'TO_NUMBER('||
NVL(V_SOURCE_FIELD_NAME,'NULL')||')' ; -- V_SOURCE_FIELD_NAME_FORCLEANUP
ELSIF V_DEST_DATA_TYPE ='DATE' AND K.FORMAT_MODEL IS
NOT NULL THEN
V_SOURCE_FIELD_NAME := 'TO_DATE('||
NVL(V_SOURCE_FIELD_NAME,'NULL')||','||CHR(39)||K.FORMAT_MODEL||CHR(39) ||')' ;

ELSE
NULL;
END IF;
END IF;
IF V_SOURCE_FIELD_NAME_FORCLEANUP IS NOT NULL THEN
IF V_DFLT_DESTINATION_FIELD_VALUE IS NOT NULL THEN

V_SELECT := V_SELECT || 'NVL( '||


V_SOURCE_FIELD_NAME_FORCLEANUP||','
--V_SOURCE_COLUMN := 'NVL( '||
V_SOURCE_FIELD_NAME_FORCLEANUP||','
|| CASE WHEN V_DFLT_FORMAT_MODEL IS NOT
NULL THEN ' TO_DATE('||

CHR(39)||V_DFLT_DESTINATION_FIELD_VALUE||CHR(39)

||','||CHR(39)|| V_DFLT_FORMAT_MODEL ||CHR(39)||')'

ELSE CHR(39)||V_DFLT_DESTINATION_FIELD_VALUE||CHR(39)
END

||')' ||',';
ELSE
V_SELECT := V_SELECT ||
NVL(V_SOURCE_FIELD_NAME_FORCLEANUP,'NULL') ||',';
--V_SOURCE_COLUMN :=
NVL(V_SOURCE_FIELD_NAME_FORCLEANUP,'NULL') ||',';
END IF;
ELSE
IF V_DFLT_DESTINATION_FIELD_VALUE IS NOT NULL THEN

V_SELECT := V_SELECT || 'NVL( '||


NVL(V_SOURCE_FIELD_NAME,'NULL')||','||
--V_SOURCE_COLUMN :='NVL( '||
V_SOURCE_FIELD_NAME||','||
CASE WHEN V_DFLT_FORMAT_MODEL IS NOT
NULL THEN ' TO_DATE('||

CHR(39)||V_DFLT_DESTINATION_FIELD_VALUE||CHR(39)

||','||CHR(39)|| V_DFLT_FORMAT_MODEL ||CHR(39)||')'


ELSE CHR(39)||
V_DFLT_DESTINATION_FIELD_VALUE||CHR(39)
END

||')' ||',';

ELSE
V_SELECT := V_SELECT ||
NVL(V_SOURCE_FIELD_NAME,'NULL') ||',';
--V_SOURCE_COLUMN:=
NVL(V_SOURCE_FIELD_NAME,'NULL') ||',';
END IF;
END IF;
END IF; -- v_NON_DATABASE_SOURCE_COLUMN ='Y'
END IF;

--V_SELECT := V_SELECT || V_SOURCE_COLUMN ;


ZZZ_TEST('C3 Fields LOOP :'||K.LINE_NO||' - '||
K.SOURCE_FIELD_NAME|| ': '||V_SOURCE_FIELD_NAME ,V_LOG_FOOTPRINT);

/*

-----------------------------------------------------------------------------------
-------------------------
--------------------------------------- CHECK DATA SIZE ISSUES
--------------------------------------------

-----------------------------------------------------------------------------------
-------------------------
DECLARE
V_DATA_TYPE VARCHAR2(60);
V_DATA_LENGTH NUMBER(20,8);
V_NULLABLE VARCHAR2(1);
VSCRIPT VARCHAR2(4000);
V_DATASIZEISSUE NUMBER(20);
BEGIN

select case when substr(V_SOURCE_COLUMN,-1) =',' then


substr(V_SOURCE_COLUMN,1,length(V_SOURCE_COLUMN)-1 )
else V_SOURCE_COLUMN
end
into V_SOURCE_COLUMN
from dual;

SELECT DATA_TYPE , DATA_LENGTH , NULLABLE


INTO V_DATA_TYPE, V_DATA_LENGTH, V_NULLABLE
FROM USER_TAB_COLS
WHERE TABLE_NAME = V_LOAD_HEADER.DESTINATION_TABLE_NAME
AND COLUMN_NAME = K.DESTINATION_FIELD_NAME ;--
K.SOURCE_FIELD_NAME;
IF V_DATA_TYPE ='VARCHAR2' THEN
--VSCRIPT:= 'SELECT LENGTH('||V_SOURCE_COLUMN||') FROM '||
V_LOAD_HEADER.SOURCE_TABLE_NAME
VSCRIPT:= 'SELECT COUNT(1) FROM '||
V_LOAD_HEADER.SOURCE_TABLE_NAME
||' WHERE LENGTH('||V_SOURCE_COLUMN ||')>'|| V_DATA_LENGTH;
ZZZ_TEST('C3 DATA SIZE ISSUE ERROR :'||
VSCRIPT,V_LOG_FOOTPRINT);
EXECUTE IMMEDIATE VSCRIPT INTO V_DATASIZEISSUE;

IF V_DATASIZEISSUE >0 THEN

ZZZ_TEST('C3 DATA SIZE ISSUE ERROR :'||SQLERRM


||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,V_LOG_FOOTPRINT);

SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,VSCRIPT,NULL,V_DATA_LENGTH);
V_ERRORS_FOUND := NVL(V_ERRORS_FOUND,0)+1;

END IF;
END IF;
--exception
END;
*/
END LOOP;
--V_ERROR_LOGS :=' Data size issues encountered ';
--if V_ERRORS_FOUND =0 then

-----------------------------------------------------------------------------------
-------------------------

-----------------------------------------------------------------------------------
-------------------------

IF V_INSERT1 IS NULL THEN


V_INSERT := RTRIM(V_INSERT,',')||')';
ELSE
V_INSERT1 := RTRIM(V_INSERT1,',')||')';
END IF;
IF V_LOAD_HEADER.WHERE_CONDITION IS NOT NULL THEN
V_SELECT := RTRIM(V_SELECT,',')||' FROM '||
V_LOAD_HEADER.SOURCE_USER_ID||'.'||V_LOAD_HEADER.SOURCE_TABLE_NAME||' WHERE '||
V_LOAD_HEADER.WHERE_CONDITION;
ELSE
V_SELECT := RTRIM(V_SELECT,',')||' FROM '||
V_LOAD_HEADER.SOURCE_USER_ID||'.'||V_LOAD_HEADER.SOURCE_TABLE_NAME;
END IF;
V_FLAG := '8';

BEGIN

IF V_INSERT1 IS NULL THEN


V_FLAG := '9';
ZZZ_TEST('C3 Insert V_INSERT :'||
V_INSERT ,V_LOG_FOOTPRINT);
ZZZ_TEST('C3 Insert V_SELECT :'||
V_SELECT ,V_LOG_FOOTPRINT);
EXECUTE IMMEDIATE V_INSERT||' '|| V_SELECT;
ELSE
V_FLAG := '10';
ZZZ_TEST('C3 Insert V_INSERT1 :'||
V_INSERT1,V_LOG_FOOTPRINT);
ZZZ_TEST('C3 Insert V_SELECT :'||
V_SELECT,V_LOG_FOOTPRINT);
EXECUTE IMMEDIATE V_INSERT||V_INSERT1||' '||V_SELECT;
END IF;

EXCEPTION
WHEN OTHERS THEN

ZZZ_TEST('C3 Insert OTH ERROR :'||SQLERRM ||


DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,V_LOG_FOOTPRINT);
SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,V_INSERT||' '||
V_SELECT,NULL,V_FLAG||' '||SUBSTR(SQLERRM,1,2000));
V_ERRORS_FOUND := NVL(V_ERRORS_FOUND,0)+1;

COMMIT;
END;

IF V_ERRORS_FOUND >0 THEN


--if V_ERROR_LOGS is null then
V_ERROR_LOGS :=' Other Errors encountered ';

-- else V_ERROR_LOGS:= V_ERROR_LOGS ||chr(10)||'


Other Errors encountered';end if;
END IF;
---end if; --CHECK DATA SIZE ISSUES
V_ERRORS_FOUND := 0;

V_FLAG := '11';
COMMIT;

-----------------------------------------------------------------------------------
-------------------------
--------------------------------------- Post sql
-----------------------------------------------------------

-----------------------------------------------------------------------------------
-------------------------
ZZZ_TEST('C4 CURSOR Post sql LOOP STARTS :',V_LOG_FOOTPRINT);

FOR K IN C4 LOOP
BEGIN
EXECUTE IMMEDIATE K.EXECUTE_SQLS;
EXCEPTION
WHEN OTHERS THEN

ZZZ_TEST('C4 Post sql OTH ERROR : '||


K.EXECUTE_SQLS||SQLERRM ||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,V_LOG_FOOTPRINT);

SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,K.EXECUTE_SQLS,K.LINE_NO,'Error in Post Sql


at line ' || K.LINE_NO );
V_ERRORS_FOUND := NVL(V_ERRORS_FOUND,0)+1;

COMMIT;
END;
ZZZ_TEST('C4 Post Sql Loop : '||
K.EXECUTE_SQLS,V_LOG_FOOTPRINT);
END LOOP;
/*********************************************************/
--
--- IF POST SQL FAILS, NEED TO REVERT BACK INSERT ---
--
/*********************************************************/

IF V_ERRORS_FOUND >0 THEN


V_ERRORS_FOUND_TOTAL := NVL(V_ERRORS_FOUND_TOTAL,0) + V_ERRORS_FOUND;
IF V_ERROR_LOGS IS NULL THEN
V_ERROR_LOGS :=' Errors encountered for Post-SQL scripts';
ELSE V_ERROR_LOGS:= V_ERROR_LOGS ||',Post-SQL
scripts';END IF;
END IF;
V_ERRORS_FOUND :=0;

-----------------------------------------------------------------------------------
-------------------------
--------------------------------------- SUMMARY
-----------------------------------------------------------
--- TO BE MOVED TO NEW PROGUNIT AND BE CALLED IN THE EXECPTION SECTIONS TOO

-----------------------------------------------------------------------------------
-------------------------
--else
-- Rollback; -- presqls if any
END IF;-- if V_ERROR_LOGS is null then

ZZZ_TEST(' SUMMARY : '||


P_INTERFACE_ID,V_LOG_FOOTPRINT);

DELETE FROM SYS_LOAD_INTERFACE_SUMMARY


WHERE INTERFACE_ID=P_INTERFACE_ID
AND SUMMARY_TYPE='DATA_LOADED_INFO';

SELECT NVL(MAX(LINE_NO),0)+1
INTO V_LINE_NO
FROM SYS_LOAD_INTERFACE_SUMMARY
WHERE INTERFACE_ID=P_INTERFACE_ID ;
-- AND SUMMARY_TYPE='DATA_LOADED_INFO';

IF V_ERROR_LOGS = 'All Good' THEN

EXECUTE IMMEDIATE 'select count(*) from '|| V_LOAD_HEADER.DESTINATION_TABLE_NAME


INTO V_NO_OF_RECORDS;
V_ERROR_LOGS := '<font color= "BLUE"><B>'||V_ERROR_LOGS ||'</B></font>( '||
V_NO_OF_RECORDS||' rows inserted in '||V_LOAD_HEADER.DESTINATION_TABLE_NAME
||' )' ;
ELSE
V_ERROR_LOGS := '<font color= "Red">'||V_ERROR_LOGS ||'</font>' ;
END IF;

INSERT INTO SYS_LOAD_INTERFACE_SUMMARY( INTERFACE_ID,


LINE_NO,
SUMMARY_TYPE,
SUMMARY_RESULTS,
NOTES,
CREATED_BY,
CREATED_DATE,
CHANGED_BY,
CHANGED_DATE)
VALUES( P_INTERFACE_ID ,--INTERFACE_ID,

V_LINE_NO , --LINE_NO,
'DATA_LOADED_INFO' ,--SUMMARY_TYPE,

'Data Processed by ' || P_USER_ID || '


on ' || SYSDATE, --SUMMARY_RESULTS,
V_ERROR_LOGS , --NOTES,

P_USER_ID ,--CREATED_BY,
SYSDATE ,--CREATED_DATE,

NULL ,--CHANGED_BY,
NULL --CHANGED_DATE
);
COMMIT;

EXCEPTION

WHEN NO_DATA_FOUND THEN


SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID, V_FLAG||CHR(10)||
V_SQL||CHR(10)||
V_INSERT||' '||V_SELECT||
CHR(10)||CHR(10)||CHR(10)||'Source Error
Details:'||CHR(10)||SQLERRM||',' ||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,
NULL,
'Field value/Field is Missing per Setup.');
WHEN SETUP_ERRORS_MISSING_MAPPING THEN
SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID, --V_FLAG||CHR(10)||
'Click on Button "Refresh Fields from
Destination Table" and/or "Refresh Source Field List/Col Mappings" '||
' to auto-map source and destination
columns.'||chr(10)||'Use "Add New Line" Button for any missing columns mapping.' ||
'/Run the below query to check if any
Business Rules source, is missing'||
CHR(10)||
CHR(10)||
' select * from ('|| CHR(10)||
' SELECT LINE_NO,
BUSINESS_RULE_ID ,TABLE_NAME, FIELD_NAME, RULE_CATEGORY, RULE_TYPE,'|| CHR(10)||

' (SELECT IGNORE_DESTINATION


'|| CHR(10)||
' FROM
SYS_LOAD_INTERFACE_DETAIL '|| CHR(10)||
' WHERE INTERFACE_ID =
j.INTERFACE_ID '|| CHR(10)||
' AND
DESTINATION_FIELD_NAME = J.FIELD_NAME ) mising_setup '|| CHR(10)||
' FROM SYS_LOAD_INTERFACE_RULES j
'|| CHR(10)||
' WHERE j.INTERFACE_ID =
<P_INTERFACE_ID> '|| CHR(10)||
' AND NVL(j.ACTIVE_FLAG,'||
chr(39)||'N'||chr(39)||')='||chr(39)||'Y'||chr(39)||CHR(10)||
') where mising_setup is null;' ||
CHR(10)||
CHR(10)||
CHR(10)||

' Else Drill down and setup by clicking on


the fields name in the region "Load Interface Setup Detail".'||
CHR(10)||CHR(10)||CHR(10)||'Source Error
Details:'||CHR(10)||SQLERRM||',' ||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,
NULL,
'Source and Destination columns Setups are missing.');

WHEN TABLE_ERROR_SOURCE THEN


ZZZ_TEST(' END TABLE_ERROR_SOURCE:'||SQLERRM ||
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,V_LOG_FOOTPRINT);
SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID, CHR(10)||' Pl. complete the Setups for
Loading Process.'
||CHR(10)||' Check for field with label '

||CHR(39)||'Source Table Name'||


CHR(39)||' ,on the First Tab('
||CHR(39)||'Interface Setup'||
CHR(39)||'), and in the Region: '
||CHR(39)||'Load Interface Setup'||
CHR(10)||CHR(10)||CHR(10)||'Source Error
Details:'||CHR(10)||SQLERRM||',' ||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,
NULL,
'<font color= "Red"><B>Incomplete Setup.</B>
</font>Source Table <B>'||V_LOAD_HEADER.SOURCE_TABLE_NAME||'</B> does not Exist.');

DELETE FROM SYS_LOAD_INTERFACE_SUMMARY WHERE INTERFACE_ID=P_INTERFACE_ID


AND SUMMARY_TYPE='Source Table Setup Checks';
SELECT NVL(MAX(LINE_NO),0)+1 INTO V_LINE_NO FROM SYS_LOAD_INTERFACE_SUMMARY
WHERE INTERFACE_ID=P_INTERFACE_ID ;-- AND SUMMARY_TYPE='Source Table Setup
Checks';
INSERT INTO SYS_LOAD_INTERFACE_SUMMARY( INTERFACE_ID,LINE_NO, SUMMARY_TYPE,
SUMMARY_RESULTS, NOTES, CREATED_BY,CREATED_DATE)
VALUES( P_INTERFACE_ID ,V_LINE_NO ,'Source Table Setup Checks','Data
Processed by ' || P_USER_ID || ' on ' || SYSDATE,
'<font color= "Red">Data load Setup incomplete wrt Source
Table.</font>' ,
P_USER_ID,SYSDATE);
COMMIT;

WHEN TABLE_ERROR_DESTINATION THEN


ZZZ_TEST(' END TABLE_ERROR_DESTIN:'||SQLERRM ||
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,V_LOG_FOOTPRINT);
SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID, CHR(10)||' Pl. complete the Setups for
Loading Process.'
||CHR(10)||' Check for field with label '

||CHR(39)||'Destination Table Name'||


CHR(39)||' ,on the First Tab('
||CHR(39)||'Interface Setup'||
CHR(39)||'), and in the Region: '
||CHR(39)||'Load Interface Setup'||
CHR(10)||CHR(10)||CHR(10)||'Source Error
Details:'||CHR(10)||SQLERRM||',' ||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,
NULL,
'<font color= "Red"><B>Incomplete
Setup.</B> </font> Destination Table <B>'||
V_LOAD_HEADER.DESTINATION_TABLE_NAME||'</B> does not Exist.');
DELETE FROM SYS_LOAD_INTERFACE_SUMMARY WHERE INTERFACE_ID=P_INTERFACE_ID
AND SUMMARY_TYPE='Destination Table Setup Checks';
SELECT NVL(MAX(LINE_NO),0)+1 INTO V_LINE_NO FROM SYS_LOAD_INTERFACE_SUMMARY
WHERE INTERFACE_ID=P_INTERFACE_ID ;-- AND SUMMARY_TYPE='Destination Table Setup
Checks';
INSERT INTO SYS_LOAD_INTERFACE_SUMMARY( INTERFACE_ID,LINE_NO, SUMMARY_TYPE,
SUMMARY_RESULTS, NOTES, CREATED_BY,CREATED_DATE)
VALUES( P_INTERFACE_ID ,V_LINE_NO ,'Destination Table Setup
Checks','Data Processed by ' || P_USER_ID || ' on ' || SYSDATE,
'<font color= "Red">Data load Setup incomplete wrt Destination
Table.</font>' ,
P_USER_ID,SYSDATE);
COMMIT;

WHEN SETUP_ERRORS THEN


--RAISE_APPLICATION_ERROR(-20702,V_SELECT||'-'||SUBSTR(SQLERRM,1,190));
ZZZ_TEST(' END SETUP_ERRORS:'||SQLERRM ||
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,V_LOG_FOOTPRINT);
DELETE FROM SYS_LOAD_INTERFACE_SUMMARY WHERE INTERFACE_ID=P_INTERFACE_ID
AND SUMMARY_TYPE='Data Setup Checks';
SELECT NVL(MAX(LINE_NO),0)+1 INTO V_LINE_NO FROM SYS_LOAD_INTERFACE_SUMMARY
WHERE INTERFACE_ID=P_INTERFACE_ID ;-- AND SUMMARY_TYPE='Data Setup Checks';
INSERT INTO SYS_LOAD_INTERFACE_SUMMARY( INTERFACE_ID,LINE_NO, SUMMARY_TYPE,
SUMMARY_RESULTS, NOTES, CREATED_BY,CREATED_DATE)
VALUES( P_INTERFACE_ID ,V_LINE_NO ,'Data Setup Checks','Data Processed
by ' || P_USER_ID || ' on ' || SYSDATE,
'<font color= "Red">Data load Setup incomplete wrt Business
Rules.</font>' ,
P_USER_ID,SYSDATE);
COMMIT;
WHEN OUT_ERRORS THEN
--RAISE_APPLICATION_ERROR(-20702,V_SELECT||'-'||SUBSTR(SQLERRM,1,190));
ZZZ_TEST(' END OUT_ERRORS:'||SQLERRM ||
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,V_LOG_FOOTPRINT);
NULL;
WHEN OTHERS THEN
--RAISE_APPLICATION_ERROR(-20702,V_SELECT||'-'||SUBSTR(SQLERRM,1,190));
ZZZ_TEST(' END OTHERS :'||SQLERRM ||
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,V_LOG_FOOTPRINT);
SP_INSERT_INTERFACE_LOG(P_INTERFACE_ID,
'V_FLAG-'||V_FLAG||CHR(10)||
V_SQL ||CHR(10)||
V_INSERT||' '||
V_SELECT,
NULL
,SQLERRM||' :: '||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);

COMMIT;
END SP_DATA_LOAD;

You might also like