Oracle订购的更新更好的方法/无闩锁等待事件

Oracle订购的更新更好的方法/无闩锁等待事件,oracle,performance,plsql,Oracle,Performance,Plsql,在我们的解决方案中,我们必须更新从序列中分配值的行。此更新应遵守特定的顺序,因此,我们采用了以下方法: PROCEDURE P_RID_SELLERS_RETAIL (pCustomerID IN NUMBER, pCompanyID IN NUMBER) IS CURSOR SYNC_CURSOR IS SELECT RECORD_ID FROM SALES_SCH.SYNC_SELLERS_RETAIL WHERE CUSTOMER_I

在我们的解决方案中,我们必须更新从序列中分配值的行。此更新应遵守特定的顺序,因此,我们采用了以下方法:

PROCEDURE P_RID_SELLERS_RETAIL (pCustomerID IN NUMBER, pCompanyID IN NUMBER)
IS
  CURSOR SYNC_CURSOR
  IS
       SELECT RECORD_ID
         FROM SALES_SCH.SYNC_SELLERS_RETAIL
        WHERE CUSTOMER_ID = pCustomerID AND COMPANY_ID = pCompanyID AND RECORD_ID < 0
     ORDER BY RECORD_ID;

  TYPE RECORD_ID_AAT IS TABLE OF SALES_SCH.SYNC_SELLERS_RETAIL.RECORD_ID%TYPE
     INDEX BY PLS_INTEGER;

  L_RECORD_ID_AAT   RECORD_ID_AAT;
BEGIN
  OPEN SYNC_CURSOR;

  LOOP
     FETCH SYNC_CURSOR BULK COLLECT INTO L_RECORD_ID_AAT LIMIT 100000;

     EXIT WHEN L_RECORD_ID_AAT.COUNT = 0;

     FORALL i IN L_RECORD_ID_AAT.FIRST .. L_RECORD_ID_AAT.LAST
        UPDATE SALES_SCH.SYNC_SELLERS_RETAIL
           SET RECORD_ID = RECORD_ID.NEXTVAL
         WHERE RECORD_ID = L_RECORD_ID_AAT (i);

     COMMIT;
  END LOOP;

  CLOSE SYNC_CURSOR;
END;
程序P_RID_SELLERS_RETAIL(编号为PCCustomerID,编号为pCompanyID)
是
光标同步
是
选择记录ID
来自销售、同步、卖方、零售
其中CUSTOMER\u ID=pccustomerid,COMPANY\u ID=pCompanyID,RECORD\u ID<0
按记录编号订购;
类型记录\u ID\u AAT是销售表\u SCH.同步\u卖家\u零售。记录\u ID%类型
通过PLS_整数进行索引;
L_RECORD_ID_AAT RECORD_ID_AAT;
开始
打开同步光标;
环
获取同步游标批量收集到L_记录\u ID \u AAT限制100000;
当L_RECORD_ID_AAT.COUNT=0时退出;
对于所有我在L_记录_ID_AAT。。最后一次记录
更新销售\同步\卖家\零售
设置记录\u ID=记录\u ID.NEXTVAL
其中,RECORD_ID=L_RECORD_ID_AAT(i);
犯罪
端环;
关闭同步光标;
结束;
有时,当有大量数据需要更新时(大=超过一百万行),我们开始处理性能问题,主要是无锁等待事件

你知道还有比这更好的有序更新方法吗

非常感谢