ORACLE使用游标更新数据

--使用游标逐条更新数据
DECLARE
I INTEGER;
TYPE TYPE_TEST IS TABLE OF TBL_NAME%ROWTYPE; 
TBL_TEST  TYPE_TEST  ;
BEGIN
SELECT * BULK COLLECT INTO TBL_TEST FROM  TBL_NAME;
FORALL I IN TABLE_TEST.FIRST .. TBL_TEST.LAST
UPDATE TBL_NAME2 T
        SET T.A = TBL_TEST(I).B;
          WHERE T.ROWID = TBL_TEST(I).T1ROW;
COMMIT;
END;
/    

--游标分批(10条)更新
DECLARE
CURSOR C_TBL IS SELECT A,B FROM TESTA;
TYPE TYP_TBL IS TABLE  OF  TESTA%ROWTYPE;
TBL_ TBL   TYP_TBL;
BEGIN 
OPEN  C_TBL;
LOOP
FETCH  C_TBL   BULK COLLECT INTO  TBL_ TBL   LIMIT 10;
   EXIT  WHEN  C_TBL.COUNT = 0;
      FORALL  I IN  C_TBL.FIRST ..  C_TBL.LAST
     UPDATE   TESTB T
     SET T.C =  TBL_ TBL (I) .A
      WHERE  T.D =  TBL_ TBL (I) .B;
  DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
  COMMIT;
  END LOOP;
  CLOSE  C_TBL;
END;





你可能感兴趣的:(SQL)