load高階應用

flywiththewind發表於2016-08-18

為了提高資料的移動速度,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部落格 ” ,連結:http://blog.itpub.net/26224914/viewspace-2123652/,如需轉載,請註明出處,否則將追究法律責任。

相關文章