I have written one procedure, which will insert data from master table to working table . Its kind of data replication from one table to another table. So, at a time more than 2-5 Million data will be inserted in working table. Now I am facing performance issue here.
I can't use forall statement when DML operation, as many if-else condition is there before inserting.
So, I used hints like /*+ APPEND_VALUES / and /+ APPEND*/. But am not sure which one will be appropriate for this.
PROCEDURE process_assets
CURSOR c_get_unprocessed_rcd (p_last_run_date DATE,
p_cur_run_date DATE)
IS
SELECT ROWID,
covered_line_id,
op_type,
seq_id,
NRT_CREATION_DATE,
NRT_last_update_DATE,
contract_id,
service_line_id,
gg_create_date,
instance_id,
item_type_flag,
nvl(old_item_type_flag,item_type_flag) old_item_type_flag
FROM XXCCS_DS_CVDLIB_DTLEB_ES
WHERE TRGT_CREATE_DATE BETWEEN p_last_run_date AND p_cur_run_date
ORDER BY seq_id ASC;
TYPE l_get_unprocessed_type IS TABLE OF c_get_unprocessed_rcd%ROWTYPE
INDEX BY PLS_INTEGER;
l_get_unprocessed_rcd l_get_unprocessed_type;
BEGIN
OPEN c_get_unprocessed_rcd (p_last_run_date, p_cur_run_date);
LOOP
EXIT WHEN c_get_unprocessed_rcd%NOTFOUND;
FETCH c_get_unprocessed_rcd
BULK COLLECT INTO l_get_unprocessed_rcd
LIMIT 10000;
FOR i IN l_get_unprocessed_rcd.FIRST .. l_get_unprocessed_rcd.LAST
LOOP
BEGIN
if
l_get_unprocessed_rcd (i).op_type = 'I'
THEN
BEGIN
INSERT
INTO XXCCS_UEE_SRVC_ES_ACT_KEY (covered_line_id,
instance_id,
seq_id,
OP_TYPE,
SOT_TABLE,
SOT_CREATE_DATE,
SOT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
contract_id,
item_type_flag)
VALUES (l_get_unprocessed_rcd (i).covered_line_id,
l_get_unprocessed_rcd (i).instance_id,
l_get_unprocessed_rcd (i).seq_id,
l_get_unprocessed_rcd (i).op_type,
L_SOT_TABLE_NAME,
l_get_unprocessed_rcd (i).NRT_CREATION_DATE,
l_get_unprocessed_rcd (i).NRT_LAST_UPDATE_DATE,
l_get_unprocessed_rcd (i).GG_CREATE_DATE,
l_get_unprocessed_rcd (i).contract_id,
l_get_unprocessed_rcd (i).item_type_flag);
INSERT
INTO XXCCS_UEE_DEVC_ES_CVD_KEY_V3 (instance_id,
OP_TYPE,
SOT_TABLE,
SOT_CREATE_DATE,
SOT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
seq_id,
item_type_flag)
VALUES (l_get_unprocessed_rcd (i).instance_id,
l_get_unprocessed_rcd (i).op_type,
L_SOT_TABLE_NAME,
l_get_unprocessed_rcd (i).NRT_CREATION_DATE,
l_get_unprocessed_rcd (i).NRT_LAST_UPDATE_DATE,
l_get_unprocessed_rcd (i).GG_CREATE_DATE,
l_get_unprocessed_rcd (i).seq_id,
l_get_unprocessed_rcd (i).item_type_flag);
END;
ELSIF l_get_unprocessed_rcd (i).op_type = 'U'
THEN
BEGIN
INSERT
INTO XXCCS_UEE_SRVC_ES_ACT_KEY (covered_line_id,
instance_id,
seq_id,
OP_TYPE,
SOT_TABLE,
SOT_CREATE_DATE,
SOT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
contract_id,
item_type_flag)
VALUES (l_get_unprocessed_rcd (i).covered_line_id,
l_get_unprocessed_rcd (i).instance_id,
l_get_unprocessed_rcd (i).seq_id,
l_get_unprocessed_rcd (i).op_type,
L_SOT_TABLE_NAME,
l_get_unprocessed_rcd (i).NRT_CREATION_DATE,
l_get_unprocessed_rcd (i).NRT_LAST_UPDATE_DATE,
l_get_unprocessed_rcd (i).GG_CREATE_DATE,
l_get_unprocessed_rcd (i).contract_id,
l_get_unprocessed_rcd (i).item_type_flag);
INSERT
INTO XXCCS_UEE_DEVC_ES_CVD_KEY_V3 (instance_id,
OP_TYPE,
SOT_TABLE,
SOT_CREATE_DATE,
SOT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
seq_id,
item_type_flag)
VALUES (l_get_unprocessed_rcd (i).instance_id,
l_get_unprocessed_rcd (i).op_type,
L_SOT_TABLE_NAME,
l_get_unprocessed_rcd (i).NRT_CREATION_DATE,
l_get_unprocessed_rcd (i).NRT_LAST_UPDATE_DATE,
l_get_unprocessed_rcd (i).GG_CREATE_DATE,
l_get_unprocessed_rcd (i).seq_id,
l_get_unprocessed_rcd (i).item_type_flag);
IF (l_get_unprocessed_rcd (i).item_type_flag in('P','S') AND l_get_unprocessed_rcd (i).old_item_type_flag IN('C'))
OR
(l_get_unprocessed_rcd (i).item_type_flag in('C') AND l_get_unprocessed_rcd (i).old_item_type_flag IN('P','S'))
THEN
BEGIN
INSERT
INTO XXCCS_UEE_SRVC_ES_ACT_KEY (covered_line_id,
instance_id,
seq_id,
OP_TYPE,
SOT_TABLE,
SOT_CREATE_DATE,
SOT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
contract_id,
item_type_flag)
VALUES (l_get_unprocessed_rcd (i).covered_line_id,
l_get_unprocessed_rcd (i).instance_id,
l_get_unprocessed_rcd (i).seq_id,
'D',
L_SOT_TABLE_NAME,
l_get_unprocessed_rcd (i).NRT_CREATION_DATE,
l_get_unprocessed_rcd (i).NRT_LAST_UPDATE_DATE,
l_get_unprocessed_rcd (i).GG_CREATE_DATE,
l_get_unprocessed_rcd (i).contract_id,
l_get_unprocessed_rcd (i).old_item_type_flag);
INSERT
INTO XXCCS_UEE_DEVC_ES_CVD_KEY_V3 (instance_id,
OP_TYPE,
SOT_TABLE,
SOT_CREATE_DATE,
SOT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
seq_id,
item_type_flag)
VALUES (l_get_unprocessed_rcd (i).instance_id,
'D',
L_SOT_TABLE_NAME,
l_get_unprocessed_rcd (i).NRT_CREATION_DATE,
l_get_unprocessed_rcd (i).NRT_LAST_UPDATE_DATE,
l_get_unprocessed_rcd (i).GG_CREATE_DATE,
l_get_unprocessed_rcd (i).seq_id,
l_get_unprocessed_rcd (i).old_item_type_flag);
END;
END IF;
END;
ELSE
BEGIN
INSERT
INTO XXCCS_UEE_SRVC_ES_ACT_KEY (covered_line_id,
instance_id,
seq_id,
OP_TYPE,
SOT_TABLE,
SOT_CREATE_DATE,
SOT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
contract_id,
item_type_flag)
VALUES (l_get_unprocessed_rcd (i).covered_line_id,
l_get_unprocessed_rcd (i).instance_id,
l_get_unprocessed_rcd (i).seq_id,
l_get_unprocessed_rcd (i).op_type,
L_SOT_TABLE_NAME,
l_get_unprocessed_rcd (i).NRT_CREATION_DATE,
l_get_unprocessed_rcd (i).NRT_LAST_UPDATE_DATE,
l_get_unprocessed_rcd (i).GG_CREATE_DATE,
l_get_unprocessed_rcd (i).contract_id,
l_get_unprocessed_rcd (i).item_type_flag);
BEGIN SELECT COUNT (1) INTO l_cvd_exists FROM XXCCS_DS_CVDLINEIB_DETAILEB WHERE instance_id = l_get_unprocessed_rcd (i).instance_id;
IF l_cvd_exists = 0
THEN
INSERT
INTO XXCCS_UEE_DEVC_ES_CVD_KEY_V3 (
instance_id,
OP_TYPE,
SOT_TABLE,
SOT_CREATE_DATE,
SOT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
seq_id,
item_type_flag)
VALUES (
l_get_unprocessed_rcd (i).instance_id,
l_get_unprocessed_rcd (i).op_type,
L_SOT_TABLE_NAME,
l_get_unprocessed_rcd (i).NRT_CREATION_DATE,
l_get_unprocessed_rcd (i).NRT_LAST_UPDATE_DATE,
l_get_unprocessed_rcd (i).GG_CREATE_DATE,
l_get_unprocessed_rcd (i).seq_id,
l_get_unprocessed_rcd (i).item_type_flag);
ELSE
INSERT
INTO XXCCS_UEE_DEVC_ES_CVD_KEY_V3 (
instance_id,
OP_TYPE,
SOT_TABLE,
SOT_CREATE_DATE,
SOT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
seq_id,
item_type_flag)
VALUES (
l_get_unprocessed_rcd (i).instance_id,
'U',
L_SOT_TABLE_NAME,
l_get_unprocessed_rcd (i).NRT_CREATION_DATE,
l_get_unprocessed_rcd (i).NRT_LAST_UPDATE_DATE,
l_get_unprocessed_rcd (i).GG_CREATE_DATE,
l_get_unprocessed_rcd (i).seq_id,
l_get_unprocessed_rcd (i).item_type_flag);
END IF;
end;
end;
------- Like this if else block condition will continue
here replication is happening from XXCCS_DS_CVDLIB_DTLEB_ES to XXCCS_UEE_SRVC_ES_ACT_KEY, XXCCS_UEE_DEVC_ES_CVD_KEY these two tables
So, i need to be executed this in minimal time. Can anyone suggest what hints I can use with insert query, or we can go for any other method to execute