SP Data Load
SP Data Load
SP Data Load
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 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;
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 '
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 '
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;
-----------------------------------------------------------------------------------
-------------------------
---------------------------------------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;
-----------------------------------------------------------------------------------
-------------------------
---------------------------------------business rules CHECKS
--------------------------------------------------
-----------------------------------------------------------------------------------
-------------------------
ZZZ_TEST('S3 CURSOR BR check LOOP STARTS : ',V_LOG_FOOTPRINT);
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,' ')||'</B></font> is required for Rule:'||
x.RULE_TYPE||'. ');
V_ERRORS_FOUND := NVL(V_ERRORS_FOUND,0)+1;
end if;
END LOOP;
END IF;
V_ERRORS_FOUND :=0;
V_SOURCE_FIELD_NAME_FORCLEANUP:= NULL;
-----------------------------------------------------------------------------------
-------------------------
---------------------------------------Check for Primary key data violation
--------------------------------
-----------------------------------------------------------------------------------
-------------------------
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
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;
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;
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'
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;
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;
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;
AA VARCHAR2(100);
BB VARCHAR2(100);
BEGIN
V_CNT:= 0;
V_SQL:=NULL;
AA := V_LOAD_HEADER.SOURCE_TABLE_NAME ;
BB := 'SYS_LOAD_INTERFACE_DETAIL' ;
ELSE
SELECT NVL2(V_SOURCE_FIELD_NAME,AA||'.'||V_SOURCE_FIELD_NAME,'NULL')
INTO V_SOURCE_FIELD_NAME_TEMP
FROM DUAL;
END IF;
*/
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;
V_ERRORS_FOUND:=0;
V_SOURCE_FIELD_NAME_FORCLEANUP:= NULL;
-----------------------------------------------------------------------------------
-------------------------
--------------------------------------- IS NUMBER CHECKS
---------------------------------------------------
-----------------------------------------------------------------------------------
-------------------------
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
||'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);
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;
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;
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)
END IF;
ZZZ_TEST('C7 Check lOOP :v_sql_string '||
V_SQL_STRING,V_LOG_FOOTPRINT);
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;
-----------------------------------------------------------------------------------
-------------------------
--------------------------------------- PRE SQLS
----------------------------------------------------------
-----------------------------------------------------------------------------------
-------------------------
BEGIN
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 -----------------
--
/************************************************************/
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;
V_INSERT := V_INSERT||K.DESTINATION_FIELD_NAME||',';
ELSE
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;
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
CHR(39)||V_DFLT_DESTINATION_FIELD_VALUE||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
CHR(39)||V_DFLT_DESTINATION_FIELD_VALUE||CHR(39)
||')' ||',';
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;
/*
-----------------------------------------------------------------------------------
-------------------------
--------------------------------------- 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
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
-----------------------------------------------------------------------------------
-------------------------
-----------------------------------------------------------------------------------
-------------------------
BEGIN
EXCEPTION
WHEN OTHERS THEN
COMMIT;
END;
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
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 ---
--
/*********************************************************/
-----------------------------------------------------------------------------------
-------------------------
--------------------------------------- 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
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';
V_LINE_NO , --LINE_NO,
'DATA_LOADED_INFO' ,--SUMMARY_TYPE,
P_USER_ID ,--CREATED_BY,
SYSDATE ,--CREATED_DATE,
NULL ,--CHANGED_BY,
NULL --CHANGED_DATE
);
COMMIT;
EXCEPTION
COMMIT;
END SP_DATA_LOAD;