/ * + APPEND_VALUES * /或/ * + APPEND * /,这是在oracle中进行插入操作的有效方式之一

时间:2019-07-01 10:39:26

标签: oracle stored-procedures plsql database-performance

我已经编写了一个过程,该过程将从主表中的数据插入到工作表中。从一种表到另一种表的数据复制。 因此,一次将在工作表中插入2到5百万个数据。现在我在这里面临性能问题。

在DML操作时,我不能使用forall语句,因为在插入之前存在许多if-else条件。

因此,我使用了/ * + APPEND_VALUES /和/ + APPEND * /之类的提示。但不确定哪一个适合于此。

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;

开始

  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);

开始                         选择数量(1)                           INTO l_cvd_exists                           来自XXCCS_DS_CVDLINEIB_DETAILEB                          在哪里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

此处复制是从XXCCS_DS_CVDLIB_DTLEB_ES到XXCCS_UEE_SRVC_ES_ACT_KEY,XXCCS_UEE_DEVC_ES_CVD_KEY这两个表的

因此,我需要在最短的时间内执行此操作。谁能建议我可以与插入查询一起使用的提示,或者我们可以采用其他任何方法来执行

3 个答案:

答案 0 :(得分:3)

首先,它们都有不同的用途。

  • plotOptions: { series: { lineWidth: 0, states: { hover: { lineWidthPlus: 0 } } } }, 仅在通过SELECT插入时使用:“ INSERT INTO ...(SELECT * FROM ...)”

  • APPEND最近被引入用于:“ INSERT INTO ... VALUES(...)。此提示也可用于批量操作。

两个提示都有各种约束,在各种情况下都可以忽略。参见Why Append hint is ignored

IHMO如果您确实关心插入语句的性能,请首先关注

  • 触发开销
  • 限制开销
  • 索引维护开销

在过程运行时,还要检查INSERT语句的执行计划。如果您看到:

  • 常规装入表-然后由于某种原因忽略了APPEND提示
  • 以选择方式加载表-使用直接路径加载,APPEND提示处于计划状态

答案 1 :(得分:0)

如果您使用直接路径(在使用appendappend_values时插入)逐行插入,请注意,您将在发出的每个插入语句中创建一个新的extent(或使用现有的免费范围(如果可用),否则将创建一个新的范围。 因此,测试速度很重要,但同时也要测试目标表的大小。

通过APPEND VS APPEND_VALUES的速度测试,您可以找到here(简而言之,append_valuesappend快)

关于附加的一些简要信息,您也可以在此oracle base article

上找到

答案 2 :(得分:0)

我必须说您可以使用index 0

我试图将您的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

-

--------- 更新2 ** ** ---------

-

我已经更新了答案,但是由于StackOverflow中(在“答案”部分中)有30000个字符的限制,因此我将答案here放了进去。

添加/修改了最新更新的答案中的第7、8、9、10部分

干杯!