游标+bulk collect into limit的不同方法查询数据

游标+bulk collect into limit的不同方法查询数据

数据迁移

需求:由于数据量亿级别,insert into 插入数据非常慢,于是用游标批量提交
GZ45用户的数据迁移到FDC用户

游标+bulk collect into limit

DECLARE

  TYPE V_ROWID IS TABLE OF T_SUBJECTINFO%ROWTYPE; --定义type类型

  VAR_ROWID V_ROWID; --定义rowid变量

  CURSOR V_CUR IS
    SELECT N_ID, N_YEAR, C_PLAN_CODE, C_PORT_CODE, C_ASSET_CODE, C_SUBJ_CODE,
           C_SUBJ_NAME, C_SUBJ_TYPE, C_PA_CODE, C_CURY_CODE, C_SUBJ_CODE_P,
           C_MKT_CODE, C_SEC_VAR, C_SEC_VAR_MX, C_IVT_CLSS, C_HLD_ATTR,
           C_TD_ATTR, C_ML_ATTR, C_SEC_CODE, C_CA_CODE, C_PI_CODE, N_SUBJ_DETAIL,
           C_DV_BOOL_TYPE_AM, C_DV_JD_WAY, C_SUBJ_LEVEL, C_DS_CODE, C_ORG_CODE,
           C_DV_INVEST_MODE, C_DV_SEC_DUR, C_WART_TYPE, C_EXER_MODE,
           C_UPDATE_TIME, C_TIMESTAMP, FSYSTYPE
    FROM   GZ45.T_SUBJECTINFO;

BEGIN

  OPEN V_CUR;
  LOOP
    **FETCH V_CUR BULK COLLECT
      INTO VAR_ROWID LIMIT 5000;
    FORALL I IN 1 .. VAR_ROWID.COUNT**
      INSERT INTO FDC.T_SUBJECTINFO
        (N_ID, N_YEAR, C_PLAN_CODE, C_PORT_CODE, C_ASSET_CODE, C_SUBJ_CODE,
         C_SUBJ_NAME, C_SUBJ_TYPE, C_PA_CODE, C_CURY_CODE, C_SUBJ_CODE_P,
         C_MKT_CODE, C_SEC_VAR, C_SEC_VAR_MX, C_IVT_CLSS, C_HLD_ATTR, C_TD_ATTR,
         C_ML_ATTR, C_SEC_CODE, C_CA_CODE, C_PI_CODE, N_SUBJ_DETAIL,
         C_DV_BOOL_TYPE_AM, C_DV_JD_WAY, C_SUBJ_LEVEL, C_DS_CODE, C_ORG_CODE,
         C_DV_INVEST_MODE, C_DV_SEC_DUR, C_WART_TYPE, C_EXER_MODE, C_UPDATE_TIME,
         C_TIMESTAMP, FSYSTYPE)
      VALUES
        (VAR_ROWID(I).N_ID, VAR_ROWID(I).N_YEAR, VAR_ROWID(I).C_PLAN_CODE,
         VAR_ROWID(I).C_PORT_CODE, VAR_ROWID(I).C_ASSET_CODE,
         VAR_ROWID(I).C_SUBJ_CODE, VAR_ROWID(I).C_SUBJ_NAME,
         VAR_ROWID(I).C_SUBJ_TYPE, VAR_ROWID(I).C_PA_CODE,
         VAR_ROWID(I).C_CURY_CODE, VAR_ROWID(I).C_SUBJ_CODE_P,
         VAR_ROWID(I).C_MKT_CODE, VAR_ROWID(I).C_SEC_VAR,
         VAR_ROWID(I).C_SEC_VAR_MX, VAR_ROWID(I).C_IVT_CLSS,
         VAR_ROWID(I).C_HLD_ATTR, VAR_ROWID(I).C_TD_ATTR, VAR_ROWID(I).C_ML_ATTR,
         VAR_ROWID(I).C_SEC_CODE, VAR_ROWID(I).C_CA_CODE, VAR_ROWID(I).C_PI_CODE,
         VAR_ROWID(I).N_SUBJ_DETAIL, VAR_ROWID(I).C_DV_BOOL_TYPE_AM,
         VAR_ROWID(I).C_DV_JD_WAY, VAR_ROWID(I).C_SUBJ_LEVEL,
         VAR_ROWID(I).C_DS_CODE, VAR_ROWID(I).C_ORG_CODE,
         VAR_ROWID(I).C_DV_INVEST_MODE, VAR_ROWID(I).C_DV_SEC_DUR,
         VAR_ROWID(I).C_WART_TYPE, VAR_ROWID(I).C_EXER_MODE,
         VAR_ROWID(I).C_UPDATE_TIME, VAR_ROWID(I).C_TIMESTAMP,
         VAR_ROWID(I).FSYSTYPE);
  
   COMMIT;
   EXIT WHEN V_CUR%NOTFOUND OR V_CUR%NOTFOUND IS NULL;
  
  END LOOP;

  CLOSE V_CUR;

END;

参考

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值