db2使用存储load数据

当进行大量数据迁移时,如果只考虑使用数据库的话可以用到load实例,load实例可以快速读取大量数据并插入到目标表中,但是使用也有优缺点

优点:由于load实例是用直接将编译好的页数据放到目标表中,效率非常高。如果可以确保数据的完整性建议使用load实例。

缺点:load实例只会检测到唯一索引约束,其他的不能检测到,可能会破坏数据的完整性。

方式一:

CREATE OR REPLACE PROCEDURE "DB2ADMIN"."MPF_TEST01"
()
LANGUAGE SQL
SPECIFIC SQL191021093246600
BEGIN CALL SYSPROC.ADMIN_CMD('LOAD FROM (select * from mpf_test1) OF CURSOR INSERT INTO mpf_test2 '); 
END

说明:mpf_test1 是源表 mpf_test2是目标表 这句话的意思将源表的全部数据load到目标中。

方式二:

declare  sql_1  varchar(10000)  default  ''; 
declare  sql_2  varchar(1000)  default  ''; 
declare  flagt  varchar(1000)  default  ''; 
DECLARE  v_version_number1  INTEGER  DEFAULT  1; 
DECLARE  v_cursor_statement1  VARCHAR(32672); 
DECLARE  v_load_command1  VARCHAR(32672); 
DECLARE  v_sqlcode1  INTEGER  DEFAULT  1; 
DECLARE  V_SQLMESSAGE1  VARCHAR(2048)  DEFAULT  ''; 
DECLARE  v_rows_read1  BIGINT  DEFAULT  1; 
DECLARE  v_rows_skipped1  BIGINT  DEFAULT  1; 
DECLARE  v_rows_loaded1  BIGINT  DEFAULT  1; 
DECLARE  v_rows_rejected1  BIGINT  DEFAULT  1; 
DECLARE  v_rows_deleted1  BIGINT  DEFAULT  1; 
DECLARE  v_rows_committed1  BIGINT  DEFAULT  1; 
DECLARE  v_rows_part_read1  BIGINT  DEFAULT  1; 
DECLARE  v_rows_part_rejected1  BIGINT  DEFAULT  1;
DECLARE  v_rows_part_partitioned1  BIGINT  DEFAULT  1; 
DECLARE  v_mpp_load_summary1  VARCHAR(32672)  DEFAULT  NULL; 
-- 删除local_test表中数据
set  flagt  =  'alter  table local_test activate  not  logged  initially  with  empty  table';
execute  immediate  flagt; 
-- 查询 test 表中符合条件的字段
set  sql_1 = ' declare  aa  cursor  for select  a.AGNTPFX, a.AGNTCOY, a.AGNTNUM, a.TRANID, a.VALIDFLAG, a.CLNTPFX, a.CLNTCOY, a.CLNTNUM, a.AGNTREL, a.AGTYPE, a.AGNTBR, a.REPLVL, a.REPAGENT01, a.REPAGENT02, a.REPAGENT03, a.REPAGENT04, a.REPAGENT05, a.REPAGENT06, a.REPORTAG01, a.REPORTAG02, a.REPORTAG03 from test a WHERE a.agtype != ''RC'' with ur '; 
set  sql_2 = ' load  from  aa  of  cursor  insert  into  local_test nonrecoverable ';

– 调用存储插入数据

CALL  sysproc.db2load  (v_version_number1,sql_1,sql_2,v_sqlcode1,v_sqlmessage1,v_rows_read1,v_rows_skipped1,v_rows_loaded1,v_rows_rejected1,v_rows_deleted1,v_rows_committed1,v_rows_part_read1,v_rows_part_rejected1,v_rows_part_partitioned1,v_mpp_load_summary1); 

注意: 如果表中有字段为DB2关键字(比如user、password等),需要在查询的时候加上英文状态下的双引号(select “user”, “password” from t1),否则无效。是字符串时需要加四个英文状态下的单引号, 例如:a.agtype != ‘‘RC’’, 否则无效。查询sql写错无效,第二种方式不可以使用select *查询,只能将所查字段单个查询,第一种方式可以使用select * 查询。

方式二中的test和local_test是同构表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值