为了提高数据的移动速度,db2提供了load 实用程序。
这个工具在性能方面确实有了很大的突破,速度比import 或者insert 高的真不是一点半点。
一般来讲数据有2中存储方式,
(1)外部数据,即del\asc\ixf等等这些格式的数据,
可以直接使用load from .....
但是请注意,load\import\export这些都是db2的工具,而并非sql语句,因此直接以sql形式写入存储过程,是无法执行的。
在v9以后,可以使用sysproc.admin_cmd来执行。
call sysproc.admin_cmd('load from ....');
也可以直接在shell中实现,windows中可以使用.bat文件,类unix中可以使用shell脚本书写。
(2)内部数据,即从一个表向另一个表移动数据。
此时也有2中方法
第一种:
sysproc.admin_cmd,使用load from ...cursor语句,将一个表的数据选出,使用游标load 到另一个表中去。举例如下:
call sysproc.admin_cmd('load from (select * from h_mntdcha) of cursor insert into h_mntdcha_temp1 nonrecoverable');
存储过程如下:
drop procedure load_table1_2_table2;
create procedure load_table1_2_table2
(in table1 varchar(30),
in table2 varchar(30),
out v_str1 varchar(1000))
begin
declare v_str varchar(1000);
set v_str='load from (select * from '||table1||') of cursor insert into '||table2||' nonrecoverable';
set v_str1=v_str;
call sysproc.admin_cmd(v_str);
end;
第二种:(v8.2之前没有sysproc.admin_cmd这个存储过程,只有sysproc.db2load)
使用sysproc.db2load来完成。过程体如下:
drop procedure db2load_test;
create procedure db2load_test
(in table1 varchar(20),
in table2 varchar(20),
out cursor_out varchar(1000),
out load_state varchar(1000))
begin
DECLARE v_version_number integer default 1;--
DECLARE V_CURSOR_STATEMENT varchar(32672) default ' ';--
DECLARE V_LOAD_COMMAND varchar(32672) default ' ';--
DECLARE v_sqlcode int default 0 ; --
DECLARE v_sqlmessage varchar(2048) default ' ';--
DECLARE rows_read bigint default 0;--
DECLARE rows_skipped bigint default 0;--
DECLARE rows_loaded bigint default 0;--
DECLARE rows_rejected bigint default 0;--
DECLARE rows_deleted bigint default 0;--
DECLARE rows_committed bigint default 0;--
DECLARE rows_part_read bigint default 0;--
DECLARE rows_part_rejected bigint default 0;--
DECLARE rows_part_partitioned bigint default 0;--
DECLARE v_mpp_load_summary varchar(32672) default ' ';--
set V_CURSOR_STATEMENT='declare c cursor for select * from '||table1;
set V_LOAD_COMMAND='LOAD FROM C OF CURSOR INSERT INTO '||table2||' nonrecoverable';
set cursor_out=V_CURSOR_STATEMENT;
set load_state=V_LOAD_COMMAND;
call sysproc.db2load(V_version_number,V_CURSOR_STATEMENT,V_LOAD_COMMAND,v_sqlcode,v_sqlmessage,rows_read,rows_skipped,rows_loaded,rows_rejected,rows_deleted,rows_committed,rows_part_read,rows_part_rejected,rows_part_partitioned,V_MPP_LOAD_SUMMARY);
end@
C:\WINDOWS\system32>db2 "call sysproc.admin_cmd('load from (select * from xpf) of cursor insert into xpf2')"
结果集 1
--------------
ROWS_READ ROWS_SKIPPED ROWS_LOADED ROWS_REJECTED ROWS_DELETED ROWS_COMMITTED ROWS_PARTITIONED
UM_AGENTINFO_ENTRIES MSG_RETRIEVAL
MSG_REMOVAL
-------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
-------------------- --------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------- -----------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------
12 0 12 0 0 12 -
- -
-
1 条记录已选择。
返回状态 = 0
C:\WINDOWS\system32>
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26224914/viewspace-2123652/
,如需转载,请注明出处,否则将追究法律责任。