用储存过程批量抽取一个视图的数据,插入到一个新建的表,视图数据有2.4亿,昨天抽取到6千万就卡住了,不知道什么原因,想继续执行这个存储过程,想请问加什么条件来避免插入那些已经插入过的数据 视图上有唯一性字段XH 储存过程如下 create or replace procedure up_table as type a is table of new_table%rowtype; in_data a; i number; cursor c is select * from fcd_ci_gps@dblink; begin open c; loop fetch c bulk collect into in_data limit 5000; forall i in 1..in_data.count insert into new_table values in_data(i); commit; exit when in_data.count=0; end loop; close c; end; |
最近刚做了一个你说的类似需求:
我的业务需求是,
从oracle数据库中获取数据,然后同步到sqlserver中。
首先是配置两个数据库之间的连接设置。
我是sqlserver 连接oracle 配置sqlserver的链路服务器就OK。
下面是存储过程的内容了:
1. 创建临时表。
通过远程连接,insert into 临时表 select 远程表 。
获取数据先到本地,。
然后用 临时表的数据,跟你本地业务表的数据进行对比。
查询不通的数据。
- --(1)远程读取NC需求计划,分组汇总数据后,插入到临时表#tmp_pl_plan中。
- set@InsertStrsql=@InsertStrsql+@tmpStrsql;
- print(@InsertStrsql);
- exec(
- select@tmpCont=count(1)from#tmp_pl_plan;
- --state:0新增、1修改、2删除
- 2)用本地数据与临时表中的数据,进行对比,更新本地表中计划数量与临时表中不相等的记录.
- updatetsett.plnum=a.plnum,t.state=1
- from#tmp_pl_plana,NC_PL_PLANt
- wherea.factorycode=t.factorycodeanda.weldingdate=t.weldingdate
- anda.divisions=t.divisionsanda.zzmadeline=t.zzmadeline
- anda.zzweldingwayCode=t.zzweldingwayCodeanda.zzmadelinetypeCode=t.zzmadelinetypeCode
- anda.convertedcode=t.convertedcodeanda.ncfprocode=t.ncfprocode
- andt.plnum!=a.plnum
- andt.weldingdate>=@fbegdateandt.weldingdate<=@fenddate
- 3)对比数据,查找本地表中存在,但是临时表中不存在的记录,然后修改本地表中的数量=0,state=3表示删除
- updatetsett.plnum=2
- fromNC_PL_PLANt
- wheret.weldingdatebetween@fbegdateand andnotexists(
- select1from#tmp_pl_planawherea.factorycode=t.factorycodeanda.weldingdate=t.weldingdate
- );
- 4)对比数据,新增临时表中不存在于当前表的数据
- --deleteNC_PL_PLAN;
- insertintoNC_PL_PLAN
- select*from#tmp_pl_plant
- 1fromNC_PL_PLANawherea.factorycode=t.factorycodeanda.weldingdate=t.weldingdate
- anda.weldingdate>=@fbegdateanda.weldingdate<= )
- orderbyt.weldingdatedesc;
最近刚做了一个你说的类似需求:
我的业务需求是,
从oracle数据库中获取数据,然后同步到sqlserver中。
首先是配置两个数据库之间的连接设置。
我是sqlserver 连接oracle 配置sqlserver的链路服务器就OK。
下面是存储过程的内容了:
1. 创建临时表。
通过远程连接,insert into 临时表 select 远程表 。
获取数据先到本地,。
然后用 临时表的数据,跟你本地业务表的数据进行对比。
查询不通的数据。
- 1)远程读取NC需求计划,分组汇总数据后,插入到临时表#tmp_pl_plan中。
- @tmpStrsql;
- @InsertStrsql);
- 1)from#tmp_pl_plan;
- 2删除
- 2)用本地数据与临时表中的数据,进行对比,更新本地表中计划数量与临时表中不相等的记录.
- 1
- wherea.factorycode=t.factorycodeanda.weldingdate=t.weldingdate
- anda.divisions=t.divisionsanda.zzmadeline=t.zzmadeline
- anda.zzweldingwayCode=t.zzweldingwayCodeanda.zzmadelinetypeCode=t.zzmadelinetypeCode
- anda.convertedcode=t.convertedcodeanda.ncfprocode=t.ncfprocode
- andt.plnum!=a.plnum
- @fenddate
- 3表示删除
- 2
- fromNC_PL_PLANt
- andnotexists(
- 1from#tmp_pl_planawherea.factorycode=t.factorycodeanda.weldingdate=t.weldingdate
- );
- 4)对比数据,新增临时表中不存在于当前表的数据
- --deleteNC_PL_PLAN;
- insertintoNC_PL_PLAN
- select*from#tmp_pl_plant
- 1fromNC_PL_PLANawherea.factorycode=t.factorycodeanda.weldingdate=t.weldingdate
- )
- orderbyt.weldingdatedesc;