Я должен сказать, что вы можете использовать FORALL
.
Я пытался преобразовать вашу IF-ELSE
логику в FORALL
.
Вам просто нужно добавить условие WHEREв FORALL согласно логике.
Посмотрите на следующий код:
PROCEDURE PROCESS_ASSETS AS
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;
-- ORDER BY seq_id ASC; -- not needed
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; LOOP
EXIT WHEN C_GET_UNPROCESSED_RCD%NOTFOUND;
FETCH C_GET_UNPROCESSED_RCD BULK COLLECT INTO L_GET_UNPROCESSED_RCD LIMIT 10000;
FORALL I IN 1..L_GET_UNPROCESSED_RCD.COUNT
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
)
SELECT
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
FROM
DUAL
WHERE
L_GET_UNPROCESSED_RCD(I).OP_TYPE = 'I'; -- added this condition from your IF-ELSE
--
--
FORALL I IN 1..L_GET_UNPROCESSED_RCD.COUNT
INSERT INTO XXCCS_UEE_DEVC_ES_CVD_KEY (
INSTANCE_ID,
OP_TYPE,
SOT_TABLE,
SOT_CREATE_DATE,
SOT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
SEQ_ID,
ITEM_TYPE_FLAG
)
SELECT
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
FROM
DUAL
WHERE
L_GET_UNPROCESSED_RCD(I).OP_TYPE = 'I'; -- added this condition from your IF-ELSE
--
--
FORALL I IN 1..L_GET_UNPROCESSED_RCD.COUNT
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
)
SELECT
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
FROM
DUAL
WHERE
L_GET_UNPROCESSED_RCD(I).OP_TYPE = 'U'; -- added this condition from your IF-ELSE
--
--
--
--
FORALL I IN 1..L_GET_UNPROCESSED_RCD.COUNT
INSERT INTO XXCCS_UEE_DEVC_ES_CVD_KEY (
INSTANCE_ID,
OP_TYPE,
SOT_TABLE,
SOT_CREATE_DATE,
SOT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
SEQ_ID,
ITEM_TYPE_FLAG
)
SELECT
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
FROM
DUAL
WHERE
L_GET_UNPROCESSED_RCD(I).OP_TYPE = 'U'; -- added this condition from your IF-ELSE
--
--
FORALL I IN 1..L_GET_UNPROCESSED_RCD.COUNT
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
)
SELECT
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
FROM
DUAL
WHERE -- added this condition from your IF-ELSE
L_GET_UNPROCESSED_RCD(I).OP_TYPE = 'U'
AND ( ( 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'
) ) );
--
--
FORALL I IN 1..L_GET_UNPROCESSED_RCD.COUNT
INSERT INTO XXCCS_UEE_DEVC_ES_CVD_KEY (
INSTANCE_ID,
OP_TYPE,
SOT_TABLE,
SOT_CREATE_DATE,
SOT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
SEQ_ID,
ITEM_TYPE_FLAG
)
SELECT
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
FROM
DUAL
WHERE -- added this condition from your IF-ELSE
L_GET_UNPROCESSED_RCD(I).OP_TYPE = 'U'
AND ( ( 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'
) ) );
-- YOUR OLD CODE --
-------------------
-------------------
-------------------
-------------------
-------------------
-- FOR i IN l_get_unprocessed_rcd.FIRST .. l_get_unprocessed_rcd.LAST
-- LOOP--2
-- BEGIN--3
-- 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 (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);
--
--
--
-- 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 (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 (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);
------- Like this if else block condition will continue
-
-
--------- ОБНОВЛЕНИЕ ---------
Я полностью изменил свой ответ.Тебе это понравится.Я использовал INSERT ALL
.Просто я не уверен, что такое L_SOT_TABLE_NAME
.таким образом я рассмотрел это как String
.Вы можете выбрать переменную и использовать ее соответственно в своей процедуре.
PROCEDURE PROCESS_ASSETS AS
BEGIN
INSERT
ALL
-- 1
WHEN OP_TYPE = 'I' THEN
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 (
COVERED_LINE_ID,
INSTANCE_ID,
SEQ_ID,
OP_TYPE,
'L_SOT_TABLE_NAME',
NRT_CREATION_DATE,
NRT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
CONTRACT_ID,
ITEM_TYPE_FLAG
)
--2
WHEN OP_TYPE = 'I' THEN
INTO XXCCS_UEE_DEVC_ES_CVD_KEY (
INSTANCE_ID,
OP_TYPE,
SOT_TABLE,
SOT_CREATE_DATE,
SOT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
SEQ_ID,
ITEM_TYPE_FLAG
)
VALUES (
INSTANCE_ID,
OP_TYPE,
'L_SOT_TABLE_NAME',
NRT_CREATION_DATE,
NRT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
SEQ_ID,
ITEM_TYPE_FLAG
)
--3
WHEN OP_TYPE = 'U' THEN
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 (
COVERED_LINE_ID,
INSTANCE_ID,
SEQ_ID,
OP_TYPE,
'L_SOT_TABLE_NAME',
NRT_CREATION_DATE,
NRT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
CONTRACT_ID,
ITEM_TYPE_FLAG
)
-- 4
WHEN OP_TYPE = 'U' THEN
INTO XXCCS_UEE_DEVC_ES_CVD_KEY (
INSTANCE_ID,
OP_TYPE,
SOT_TABLE,
SOT_CREATE_DATE,
SOT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
SEQ_ID,
ITEM_TYPE_FLAG
)
VALUES (
INSTANCE_ID,
OP_TYPE,
'L_SOT_TABLE_NAME',
NRT_CREATION_DATE,
NRT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
SEQ_ID,
ITEM_TYPE_FLAG
)
-- 5
WHEN OP_TYPE = 'U'
AND ( ( ITEM_TYPE_FLAG IN (
'P',
'S'
)
AND OLD_ITEM_TYPE_FLAG IN (
'C'
) )
OR ( ITEM_TYPE_FLAG IN (
'C'
)
AND OLD_ITEM_TYPE_FLAG IN (
'P',
'S'
) ) ) THEN
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 (
COVERED_LINE_ID,
INSTANCE_ID,
SEQ_ID,
'D',
'L_SOT_TABLE_NAME',
NRT_CREATION_DATE,
NRT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
CONTRACT_ID,
OLD_ITEM_TYPE_FLAG
)
-- 6
WHEN OP_TYPE = 'U'
AND ( ( ITEM_TYPE_FLAG IN (
'P',
'S'
)
AND OLD_ITEM_TYPE_FLAG IN (
'C'
) )
OR ( ITEM_TYPE_FLAG IN (
'C'
)
AND OLD_ITEM_TYPE_FLAG IN (
'P',
'S'
) ) ) THEN
INTO XXCCS_UEE_DEVC_ES_CVD_KEY (
INSTANCE_ID,
OP_TYPE,
SOT_TABLE,
SOT_CREATE_DATE,
SOT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
SEQ_ID,
ITEM_TYPE_FLAG
)
VALUES (
INSTANCE_ID,
'D',
'L_SOT_TABLE_NAME',
NRT_CREATION_DATE,
NRT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
SEQ_ID,
OLD_ITEM_TYPE_FLAG
)
-- 7
ELSE
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 (
COVERED_LINE_ID,
INSTANCE_ID,
SEQ_ID,
OP_TYPE,
'L_SOT_TABLE_NAME',
NRT_CREATION_DATE,
NRT_LAST_UPDATE_DATE,
GG_CREATE_DATE,
CONTRACT_ID,
ITEM_TYPE_FLAG
)
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;
END PROCESS_ASSETS;
/
-
--------- ОБНОВЛЕНИЕ 2** ** ---------
-
Я обновил ответ, но поскольку существует ограничение в 30000 символов (в разделе «Ответ»)в StackOverflow я поставил ответ здесь .
Добавлены / изменены разделы - 7, 8, 9, 10 в обновленном ответе
Приветствия !!