游标遍历动态SQL

--游标遍历动态SQL

  VC_SQL_STR        VARCHAR2(3000); --sql
  VN_COMMIT_CNT     INTEGER; --事务提交计数器
  C_MAIN_CURSOR     SYS_REFCURSOR; --游标
  VR_MAIN_RECORD    表名%ROWTYPE; --行记录变量
BEGIN
  VN_COMMIT_CNT := 0;
  VC_SQL_STR    := 'SELECT * FROM 表名';
  OPEN C_MAIN_CURSOR FOR VC_SQL_STR; --打开游标
  LOOP
    FETCH C_MAIN_CURSOR
      INTO VR_MAIN_RECORD;
    EXIT WHEN C_MAIN_CURSOR%NOTFOUND;--无数据退出
    
    --逻辑
  
   --循环100条记录commit  
   VN_COMMIT_CNT := VN_COMMIT_CNT + 1;
    IF (VN_COMMIT_CNT = 100) THEN
      COMMIT;
      VN_COMMIT_CNT := 0;
    END IF;
  END LOOP;
  CLOSE C_MAIN_CURSOR; --关闭游标
END;

 

posted @ 2016-07-19 11:25  smilelily126  阅读(252)  评论(0编辑  收藏  举报