Below pkg proc execution time is 2-4 hrs.Pls helpto identify areas of improvement
explplan for update stmt :
"STATEMENT_ID","PLAN_ID","TIMESTAMP","REMARKS","OPERATION","OPTIONS","OBJECT_NODE","OBJECT_OWNER","OBJECT_NAME","OBJECT_ALIAS","OBJECT_INSTANCE","OBJECT_TYPE","OPTIMIZER","SEARCH_COLUMNS","ID","PARENT_ID","DEPTH","POSITION","COST","CARDINALITY","BYTES","OTHER_TAG","PARTITION_START","PARTITION_STOP","PARTITION_ID","OTHER","OTHER_XML","DISTRIBUTION","CPU_COST","IO_COST","TEMP_SPACE","ACCESS_PREDICATES","FILTER_PREDICATES","PROJECTION","TIME","QBLOCK_NAME"
"abc",4819,25-MAY-2022,"","UPDATE STATEMENT","","","","","",,"","ALL_ROWS",,0,,0,122105,122105,1622424,121681800,"","","",,"","","",10320898911,121778,,"","","",5,""
"abc",4819,25-MAY-2022,"","UPDATE","","","XRR","COMMERCIAL_LENDING","",,"","",,1,0,1,1,,,,"","","",,"","<other_xml><info type=""nodeid/pflags"">3 1</info><info type=""nodeid/pflags"">3 1</info><info type=""nodeid/pflags"">2 1</info><info type=""db_version"">12.2.0.1</info><info type=""parse_schema""><![CDATA[""XRR""]]></info><info type=""plan_hash_full"">696193857</info><info type=""plan_hash"">3786215340</info><info type=""plan_hash_2"">696193857</info><outline_data><hint><![CDATA[FULL(@""UPD$1"" ""COMMERCIAL_LENDING""@""UPD$1"")]]></hint><hint><![CDATA[OUTLINE_LEAF(@""UPD$1"")]]></hint><hint><![CDATA[ALL_ROWS]]></hint><hint><![CDATA[DB_VERSION('12.2.0.1')]]></hint><hint><![CDATA[OPTIMIZER_FEATURES_ENABLE('12.2.0.1')]]></hint><hint><![CDATA[IGNORE_OPTIM_EMBEDDED_HINTS]]></hint></outline_data></other_xml>","",,,,"","","",,"UPD$1"
"abc",4819,25-MAY-2022,"","PARTITION LIST","SINGLE","","","","",,"","",,2,1,2,1,122105,1622424,121681800,"","KEY","KEY",2,"","","",10320898911,121778,,"","","(upd=6,7; cmp=3) ""COMMERCIAL_LENDING"".ROWID[ROWID,10], ""PRDS_CP_IMMED_NAME""[VARCHAR2,255], ""CRR_P
PROCEDURE P_UPDATE_DSTS (
arguments...
)
IS
<declare variables section >
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML'; --
<assign variable section >
OVERRIDESQL := 'MERGE INTO ' || DSTTABLE || ' DST ';
OVERRIDESQL := OVERRIDESQL
||chr(10)||'USING ( SELECT LKP.PRDS_IP_ID
,LKP.LINE_COUNTERPARTY
,''CPOverride'' LINE_COUNTERPARTY_WIN
FROM LOOKUP.REF_COUNTERPARTY_OVERRIDE LKP
WHERE LKP.FSBR_EFFECTIVE_end_TIMESTAMP = TO_DATE (''12/31/9999'', ''MM/DD/YYYY'')) LKP ';
OVERRIDESQL := OVERRIDESQL
||chr(10)||'ON (
DST.PRDS_CP_IMMED_IP_ID = LKP.PRDS_IP_ID
AND LKP.PRDS_IP_ID IS NOT NULL
AND LKP.LINE_COUNTERPARTY IS NOT NULL
)
WHEN MATCHED THEN
UPDATE SET DST.LINE_COUNTERPARTY = LKP.LINE_COUNTERPARTY
,DST.LINE_COUNTERPARTY_WIN = LKP.LINE_COUNTERPARTY_WIN
WHERE SET_CODE = '''|| p_SETCODE|| '''
AND CYCLE_ID = '|| TO_CHAR (p_CYCLEID);
IF UPPER (p_LINEPRD) = 'Y'
THEN
IF (X123FIELINCLAUSE IS NULL)
THEN
X123FIELINCLAUSE := '''LINE_PRODUCT''';
ELSE
X123FIELINCLAUSE := X123FIELINCLAUSE || ',''LINE_PRODUCT''';
END IF;
ELSE
IF (X123FIELNOTINCLAUSE IS NULL)
THEN
X123FIELNOTINCLAUSE := '''LINE_PRODUCT''';
ELSE
X123FIELNOTINCLAUSE := X123FIELNOTINCLAUSE || ',''LINE_PRODUCT''';
END IF;
END IF;
IF UPPER (p_LINECOLT) = 'Y'
THEN
IF (X123FIELINCLAUSE IS NULL)
THEN
X123FIELINCLAUSE := '''LINE_COLLATERAL''';
ELSE
X123FIELINCLAUSE := X123FIELINCLAUSE || ',''LINE_COLLATERAL''';
END IF;
ELSE
IF (X123FIELNOTINCLAUSE IS NULL)
THEN
X123FIELNOTINCLAUSE := '''LINE_COLLATERAL''';
ELSE
X123FIELNOTINCLAUSE :=
X123FIELNOTINCLAUSE || ',''LINE_COLLATERAL''';
END IF;
END IF;
IF UPPER (p_LINEPURP) = 'Y'
THEN
IF (X123FIELINCLAUSE IS NULL)
THEN
X123FIELINCLAUSE := '''LINE_PURPOSE''';
ELSE
X123FIELINCLAUSE := X123FIELINCLAUSE || ',''LINE_PURPOSE''';
END IF;
ELSE
IF (X123FIELNOTINCLAUSE IS NULL)
THEN
X123FIELNOTINCLAUSE := '''LINE_PURPOSE''';
ELSE
X123FIELNOTINCLAUSE := X123FIELNOTINCLAUSE || ',''LINE_PURPOSE''';
END IF;
END IF;
IF UPPER (p_LINEGRNTR) = 'Y'
THEN
IF (X123FIELINCLAUSE IS NULL)
THEN
X123FIELINCLAUSE := '''LINE_GUARANTOR''';
ELSE
X123FIELINCLAUSE := X123FIELINCLAUSE || ',''LINE_GUARANTOR''';
END IF;
ELSE
IF (X123FIELNOTINCLAUSE IS NULL)
THEN
X123FIELNOTINCLAUSE := '''LINE_GUARANTOR''';
ELSE
X123FIELNOTINCLAUSE := X123FIELNOTINCLAUSE || ',''LINE_GUARANTOR''';
END IF;
END IF;
IF UPPER (p_LINECP) = 'Y'
THEN
IF (X123FIELINCLAUSE IS NULL)
THEN
X123FIELINCLAUSE := '''LINE_COUNTERPARTY''';
ELSE
X123FIELINCLAUSE := X123FIELINCLAUSE || ',''LINE_COUNTERPARTY''';
END IF;
ELSE
IF (X123FIELNOTINCLAUSE IS NULL)
THEN
X123FIELNOTINCLAUSE := '''LINE_COUNTERPARTY''';
ELSE
X123FIELNOTINCLAUSE :=
X123FIELNOTINCLAUSE || ',''LINE_COUNTERPARTY''';
END IF;
END IF;
IF UPPER (p_LINEIMSEC) = 'Y'
THEN
IF (X123FIELINCLAUSE IS NULL)
THEN
X123FIELINCLAUSE := '''X123_CP_IMMED_SECTOR''';
ELSE
X123FIELINCLAUSE := X123FIELINCLAUSE || ',''X123_CP_IMMED_SECTOR''';
END IF;
ELSE
IF (X123FIELNOTINCLAUSE IS NULL)
THEN
X123FIELNOTINCLAUSE := '''X123_CP_IMMED_SECTOR''';
ELSE
X123FIELNOTINCLAUSE :=
X123FIELNOTINCLAUSE || ',''X123_CP_IMMED_SECTOR''';
END IF;
END IF;
--
--
SQLSELECT := 'SELECT DISTINCT X123_PRODUCT_SET
FROM '|| DSTTABLE||'
WHERE CYCLE_ID = '|| TO_CHAR(p_CYCLEID)||'
AND SET_CODE = '''|| p_SETCODE ||'''
ORDER BY X123_PRODUCT_SET' ;
OPEN DSTROWNUM FOR SQLSELECT; -- DSTROWNUM ;
LOOP
FETCH DSTROWNUM INTO PRODUCTSET;
EXIT WHEN DSTROWNUM%NOTFOUND;
LOOPINDEXCNT := LOOPINDEXCNT + 1;
SQLSTRING := '';
SQLSTRINGMapping := '';
SUBSTRING1 := '';
SUBSTRING11 := '';
SQLSTRINGMapping := 'SELECT MAP.INSTRUCTION_CODE
,UPPER(trim(MAP.X123_FIELD))
,MAP.INSTRUCTION_ORDER, MAP.SOURCE_FIELD, UPPER(MAP.SOURCE_VALUE)
,CASE
WHEN UPPER(TRIM(NVL(X123_CONDITION,''NULL''))) = ''INCLUDE''
THEN ''IN''
WHEN UPPER(TRIM(NVL(X123_CONDITION,''NULL''))) = ''EXCLUDE''
THEN ''NOT IN''
WHEN UPPER(TRIM(NVL(X123_CONDITION,''NULL''))) = ''NULL''
THEN ''IS NULL''
WHEN UPPER(TRIM(NVL(X123_CONDITION,''NULL''))) = ''CONTAINS''
THEN ''LIKE''';
SQLSTRINGMapping := SQLSTRINGMapping||'
ELSE UPPER(TRIM(X123_CONDITION))
END AS CONDITIONOPERATOR
,MAP.X123_VALUE
,NVL(COALESCE(DEF_NONLNL.X123_VALUE_DEFAULT,DEF_LNL.X123_VALUE_DEFAULT), ''NotFound'') X123_VALUE_DEFAULT_COL
,NVL(COALESCE(DEF_NONLNL.X123_VALUE_WIN_DEFAULT,DEF_LNL.X123_VALUE_WIN_DEFAULT), ''NotFound'') X123_VALUE_WIN_DEF_COL';
SQLSTRINGMapping := SQLSTRINGMapping||'
FROM LOOKUP.REF_LINEITEM_MAPPING MAP
LEFT OUTER JOIN LOOKUP.REF_LINEITEM_MAPPING_DEFAULTS DEF_LNL
ON UPPER(trim(MAP.X123_FIELD)) = UPPER(trim(DEF_LNL.X123_FIELD))
AND DEF_LNL.X123_PRODUCT_SET IS NULL
AND MAP.FSBR_EFFECTIVE_END_TIMESTAMP = DEF_LNL.FSBR_EFFECTIVE_END_TIMESTAMP
LEFT OUTER JOIN LOOKUP.REF_LINEITEM_MAPPING_DEFAULTS DEF_NONLNL
ON UPPER(trim(MAP.X123_FIELD)) = UPPER(trim(DEF_NONLNL.X123_FIELD))
AND MAP.X123_PRODUCT_SET = DEF_NONLNL.X123_PRODUCT_SET
AND MAP.FSBR_EFFECTIVE_END_TIMESTAMP = DEF_NONLNL.FSBR_EFFECTIVE_END_TIMESTAMP
AND DEF_NONLNL.X123_WRITE_DEFAULT_IND = ''Y''
WHERE MAP.FSBR_EFFECTIVE_end_TIMESTAMP = TO_DATE (''12/31/9999'', ''MM/DD/YYYY'') ';
IF PRODUCTSET IS NOT NULL
THEN
SQLSTRINGMapping := SQLSTRINGMapping||chr(10)||'AND MAP.X123_PRODUCT_SET IN ('''||PRODUCTSET||''',''PRDS'')';
ELSE
SQLSTRINGMapping := SQLSTRINGMapping||chr(10)||'AND MAP.X123_PRODUCT_SET IN (''PRDS'')';
END IF;
IF (LENGTH (TRIM (X123FIELINCLAUSE)) > 0)
THEN
SQLSTRINGMapping := SQLSTRINGMapping||chr(10)||'AND MAP.X123_FIELD IN ('|| X123FIELINCLAUSE|| ')';
END IF;
IF (LENGTH (TRIM (X123FIELNOTINCLAUSE)) > 0)
THEN
SQLSTRINGMapping := SQLSTRINGMapping||chr(10)||'AND MAP.X123_FIELD NOT IN ('|| X123FIELNOTINCLAUSE|| ')';
END IF;
SQLSTRINGMapping := SQLSTRINGMapping||chr(10)||'AND ROWNUM < 11 ORDER BY MAP.X123_FIELD, INSTRUCTION_ORDER, SOURCE_FIELD, UPPER(SOURCE_VALUE) ';
OPEN ROWNUM FOR SQLSTRINGMapping;
dbms_output.put_line('elapsed time 1 = '|| dbms_utility.get_cpu_time - l_start);
LOOP
FETCH ROWNUM
INTO INSTRUCTIONCODE,
X123FIELD,
INSTRUCTIONORDER,
SOURCEFIELD,
SOURCEVALUE,
X123CONDITION,
X123VALUE,
X123VALUEDEFAULT,
X123VALUEWINDEFAULT;
EXIT WHEN ROWNUM%NOTFOUND;
IF X123FIELD = X123FIELDCOMP
THEN
IF INSTRUCTIONORDER = INSTRUCTIONORDERCOMP
THEN
IF SOURCEFIELD = SOURCEFIELDCOMP
THEN
SUBSTRING1 := SUBSTRING1 || ',''' || SOURCEVALUE || '''';
SUBSTRING11 :=
SUBSTRING11 || ',''' || SOURCEVALUE || '''';
ELSE
IF PREVCONDITION IN ('IN', 'NOT IN')
THEN
SUBSTRING1 := SUBSTRING1 || ') ';
SUBSTRING11 := SUBSTRING11 || ') ';
END IF;
IF X123CONDITION IN ('IS NULL', 'IS NOT NULL')
THEN
SUBSTRING1 :=
SUBSTRING1
|| ' AND UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ';
SUBSTRING11 :=
SUBSTRING11
|| ' AND UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ';
ELSIF X123CONDITION = 'LIKE'
THEN -- BEGINS WITH
SUBSTRING1 :=
SUBSTRING1
|| ' AND UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ''%'
|| SOURCEVALUE
|| '%'' ';
SUBSTRING11 :=
SUBSTRING11
|| ' AND UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ''%'
|| SOURCEVALUE
|| '%'' ';
ELSIF X123CONDITION = 'BEGINS'
THEN -- BEGINS WITH
SUBSTRING1 :=
SUBSTRING1
|| ' AND UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| 'LIKE'
|| ' '''
|| SOURCEVALUE
|| '%'' ';
SUBSTRING11 :=
SUBSTRING11
|| ' AND UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| 'LIKE'
|| ' '''
|| SOURCEVALUE
|| '%'' ';
ELSIF X123CONDITION = 'ENDS'
THEN -- BEGINS WITH
SUBSTRING1 :=
SUBSTRING1
|| ' AND UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| 'LIKE'
|| ' ''%'
|| SOURCEVALUE
|| ''' ';
SUBSTRING11 :=
SUBSTRING11
|| ' AND UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| 'LIKE'
|| ' ''%'
|| SOURCEVALUE
|| ''' ';
ELSE
SUBSTRING1 :=
SUBSTRING1
|| ' AND UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ('''
|| SOURCEVALUE
|| '''';
SUBSTRING11 :=
SUBSTRING11
|| ' AND UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ('''
|| SOURCEVALUE
|| '''';
END IF;
END IF;
PREVCONDITION := X123CONDITION;
ELSE
IF PREVCONDITION IN ('IN', 'NOT IN')
THEN
SUBSTRING1 := SUBSTRING1 || ') ';
SUBSTRING11 := SUBSTRING11 || ') ';
END IF;
SQLSTRING := SQLSTRING || SUBSTRING1 || SUBSTRING2;
SQLSTRING2 := SQLSTRING2 || SUBSTRING11 || SUBSTRING12;
IF X123CONDITION IN ('IS NULL', 'IS NOT NULL')
THEN
SUBSTRING1 :=
'WHEN UPPER(TRIM(' || SOURCEFIELD || ')) ' || X123CONDITION || ' ';
SUBSTRING11 :=
'WHEN UPPER(TRIM(' || SOURCEFIELD || ')) ' || X123CONDITION || ' ';
ELSIF X123CONDITION = 'LIKE'
THEN
SUBSTRING1 :=
'WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ''%'
|| SOURCEVALUE
|| '%'' ';
SUBSTRING11 :=
'WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ''%'
|| SOURCEVALUE
|| '%'' ';
ELSIF X123CONDITION = 'BEGINS'
THEN -- BEGINS WITH
SUBSTRING1 :=
'WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| 'LIKE'
|| ' '''
|| SOURCEVALUE
|| '%'' ';
SUBSTRING11 :=
'WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| 'LIKE'
|| ' '''
|| SOURCEVALUE
|| '%'' ';
ELSIF X123CONDITION = 'ENDS'
THEN -- BEGINS WITH
SUBSTRING1 :=
'WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| 'LIKE'
|| ' ''%'
|| SOURCEVALUE
|| ''' ';
SUBSTRING11 :=
'WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| 'LIKE'
|| ' ''%'
|| SOURCEVALUE
|| ''' ';
ELSE
SUBSTRING1 :=
'WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ('''
|| SOURCEVALUE
|| '''';
SUBSTRING11 :=
'WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ('''
|| SOURCEVALUE
|| '''';
END IF;
SUBSTRING2 := 'THEN ''' || X123VALUE || ''' ';
SUBSTRING12 := 'THEN ''' || INSTRUCTIONCODE || ''' ';
PREVCONDITION := X123CONDITION;
END IF;
ELSE
IF PREVCONDITION IN ('IN', 'NOT IN')
THEN
SUBSTRING1 := SUBSTRING1 || ') ';
SUBSTRING11 := SUBSTRING11 || ') ';
END IF;
SUBSTRING0 := X123FIELD || ' = ';
SUBSTRING10 := X123FIELD || '_WIN = ';
SQLSTRING :=
SQLSTRING
|| SUBSTRING1
|| SUBSTRING2
|| SUBSTRING3
|| SUBSTRING0;
SQLSTRING2 :=
SQLSTRING2
|| SUBSTRING11
|| SUBSTRING12
|| SUBSTRING13
|| SUBSTRING10;
IF X123CONDITION IN ('IS NULL', 'IS NOT NULL')
THEN
SUBSTRING1 :=
'CASE WHEN UPPER(TRIM(' || SOURCEFIELD || ')) ' || X123CONDITION || ' ';
SUBSTRING11 :=
'CASE WHEN UPPER(TRIM(' || SOURCEFIELD || ')) ' || X123CONDITION || ' ';
ELSIF X123CONDITION = 'LIKE'
THEN -- CONTAINS WITH THEN
SUBSTRING1 :=
'CASE WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ''%'
|| SOURCEVALUE
|| '%'' ';
SUBSTRING11 :=
'CASE WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ''%'
|| SOURCEVALUE
|| '%'' ';
ELSIF X123CONDITION = 'BEGINS'
THEN -- BEGINS WITH THEN
SUBSTRING1 :=
'CASE WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' '''
|| SOURCEVALUE
|| '%'' ';
SUBSTRING11 :=
'CASE WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' '''
|| SOURCEVALUE
|| '%'' ';
ELSIF X123CONDITION = 'ENDS'
THEN -- BEGINS WITH THEN
SUBSTRING1 :=
'CASE WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ''%'
|| SOURCEVALUE
|| ''' ';
SUBSTRING11 :=
'CASE WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ''%'
|| SOURCEVALUE
|| ''' ';
ELSE
SUBSTRING1 :=
'CASE WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ('''
|| SOURCEVALUE
|| '''';
SUBSTRING11 :=
'CASE WHEN UPPER(TRIM('
|| SOURCEFIELD
|| ')) '
|| X123CONDITION
|| ' ('''
|| SOURCEVALUE
|| '''';
END IF;
SUBSTRING2 := 'THEN ''' || X123VALUE || ''' ';
SUBSTRING12 := 'THEN ''' || INSTRUCTIONCODE || ''' ';
--
-- Two spaces character after END are important for update to select query conversion
--
SUBSTRING3 := 'ELSE '''||X123VALUEDEFAULT||''' END , ';
--|| X123FIELD || ', ';
SUBSTRING13 := 'ELSE '''||X123VALUEWINDEFAULT||''' END , ';
END IF;
PREVCONDITION := X123CONDITION;
X123FIELDCOMP := X123FIELD;
INSTRUCTIONORDERCOMP := INSTRUCTIONORDER;
SOURCEFIELDCOMP := SOURCEFIELD;
END LOOP;
CLOSE ROWNUM;
dbms_output.put_line('elapsed time 2 = '|| dbms_utility.get_cpu_time - l_start);
IF PREVCONDITION IN ('IN', 'NOT IN')
THEN
SUBSTRING1 := SUBSTRING1 || ') ';
SUBSTRING11 := SUBSTRING11 || ') ';
END IF;
SQLSTRING := SQLSTRING || SUBSTRING1 || SUBSTRING2;
SQLSTRING2 := SQLSTRING2 || SUBSTRING11 || SUBSTRING12;
IF NVL(SQLSTRING, 'NULL') <> 'NULL'
THEN
SQLSTRING :=
'UPDATE '
|| DSTTABLE
|| ' SET '
|| SQLSTRING
|| ' ELSE '''
|| X123VALUEDEFAULT
||''' END ';
SQLSTRING := SQLSTRING || ', ';
-- Two spaces character after END are important for update to select query conversion
SQLSTRING := SQLSTRING || SQLSTRING2 || ' ELSE '''||X123VALUEWINDEFAULT||''' END ';
CONVERTUPDTOSELECT := REPLACE(SQLSTRING,'UPDATE '||DSTTABLE||' SET','SELECT ');
if regexp_instr(CONVERTUPDTOSELECT,'LINE_COLLATERAL = ') > 0 THEN
CONVERTUPDTOSELECT := regexp_replace(CONVERTUPDTOSELECT
,'END ',' END AS LINE_COLLATERAL ',1,1);
end if;
CONVERTUPDTOSELECT := CONVERTUPDTOSELECT
|| ' FROM '||DSTTABLE
|| ' WHERE X123_PRODUCT_SET IN ('''|| PRODUCTSET|| ''')'
|| ' AND CYCLE_ID = '|| To_Char(p_CycleID)
|| ' AND SET_CODE = '''|| p_SetCode||'';
SQLSTRING :=
SQLSTRING
|| ' WHERE X123_PRODUCT_SET IN ('''
|| PRODUCTSET
|| ''') AND CYCLE_ID = '
|| To_Char(p_CycleID)
|| ' AND SET_CODE = '''
|| p_SetCode
|| '''';
EXECUTE IMMEDIATE SQLSTRING;
COMMIT;
dbms_output.put_line('elapsed time 3 = '|| dbms_utility.get_cpu_time - l_start);
IF SQL%FOUND
THEN
NUMOFRECUPDATE := SQL%ROWCOUNT;
END IF;
o_Message :=
' Total number of records updated: ' || TO_CHAR (NUMOFRECUPDATE);
IF UPPER (p_LINECP) = 'Y' AND LOOPINDEXCNT = DSTROWNUM%ROWCOUNT
THEN
-- ===eXECUTE OVERRIDE SQL
EXECUTE IMMEDIATE OVERRIDESQL || ' AND DST.X123_PRODUCT_SET = ''' || PRODUCTSET || '''';
COMMIT;
dbms_output.put_line('override sql '||OVERRIDESQL );
dbms_output.put_line('elapsed time 4 = '|| dbms_utility.get_cpu_time - l_start);
END IF;
ELSE
o_Message :=
' No record found in mapping table for provided parameters ';
END IF;
END LOOP;
close DSTROWNUM;
EXCEPTION
WHEN OTHERS THEN -- handles all other errors
...
END;