例五:把導(dǎo)出信息保存在消息文件中。

export to d:\awards.ixf of ixf messages d:\msgs.txt select * from staff where dept = 20

這個(gè)例子把staff表中dept=20的數(shù)據(jù)導(dǎo)出到d:\awards.ixf文件中,所有的導(dǎo)出信息都保存在d:\msgs.txt文件中(無論是成功、警告還是失敗信息),這樣,管理員可以通過觀察信息文件找到問題所在。

例六:給導(dǎo)出數(shù)據(jù)列重命名。

export to d:\awards.ixf of ixf method n(c1,c2,c3,c4,c5,c6,c7) messages d:\msgs.txt select * from staff where dept=20

在默認(rèn)情況下,導(dǎo)出的每一列數(shù)據(jù)以表中對(duì)應(yīng)的字段名自動(dòng)命名,我們可以通過method n子句給每一列重新命名,需要注意的是,這個(gè)子句只在ixf和wsf格式文件中有效,在文本文件中不能使用。

數(shù)據(jù)的導(dǎo)入

例七:把C盤根目錄下的org.txt文件中的數(shù)據(jù)導(dǎo)入到org表中

import from c:org.txt of del insert into org

導(dǎo)入命令和導(dǎo)出命令的格式基本上處于對(duì)應(yīng)的關(guān)系,import對(duì)應(yīng)export,from對(duì)應(yīng)to,文件名和文件格式代表的含義相同,但是導(dǎo)入命令支持ASC格式的文件,而導(dǎo)出命令不支持。另外,在導(dǎo)出命令的最后是一個(gè)SQL語句,用于選擇要導(dǎo)出的數(shù)據(jù),而導(dǎo)入命令最后不是SQL語句,而是插入數(shù)據(jù)的方式以及目標(biāo)表名稱。

例八:從ASC格式文件中導(dǎo)入數(shù)據(jù)

import from c:org2.txt of asc method l(1 5,6 19,20 25,26 37,38 50) insert into org

其中 method l 子句用于指定文本文件中每一個(gè)字段的起始位置和終止位置,每個(gè)起始位置和終止位置間用空格分開,字段之間用逗號(hào)分開。 除了l方法之外,還有n方法和p方法,下面會(huì)敘述。 www.3s8.cn

例九:利用n方法導(dǎo)入數(shù)據(jù),并且創(chuàng)建新表。

首先導(dǎo)出一個(gè)用例文件:

export to d:org.ixf of ixf method n(a,b,c,d,e) select * from org

這樣org.ixf文件中有五列數(shù)據(jù),對(duì)應(yīng)的列名分別為a、b、c、d、e

然后在從該文件中導(dǎo)入數(shù)據(jù)到一個(gè)新表中

import from d:org.ixf of ixf method n(d,e,b) replace_create into orgtest

該命令從文件中選取三列導(dǎo)入到表中,順序可以不按照文件中原有的列的順序。replace_create方式的敘述見下。

插入方式有:

INSERT 方式——在表中現(xiàn)有數(shù)據(jù)的基礎(chǔ)之上追加新的數(shù)據(jù)。

INSERT_UPDATE 方式——這種方式只能用于有主鍵的表,如果插入的數(shù)據(jù)與原有數(shù)據(jù)主鍵不沖突,則直接插入,如果主鍵沖突,則用新的數(shù)據(jù)代替原有數(shù)據(jù)。

REPLACE 方式——先把表中現(xiàn)有的數(shù)據(jù)都刪除,然后向空表中插入數(shù)據(jù)。

REPLACE_CREATE 方式——表示如果表存在,則先把表中的數(shù)據(jù)都刪除,然后向空表中插入數(shù)據(jù);如果表不存在,則先根據(jù)文件中的字段創(chuàng)建表,然后再向表中插入數(shù)據(jù)。這種方式只能把IXF格式的文件中的數(shù)據(jù)插入到表中。 www.3s8.cn

例十:利用p方法導(dǎo)入數(shù)據(jù)

import from d:org.ixf of ixf method p(4,5,2) replace into orgtest

該例子執(zhí)行的效果和例九類似,只是把n方法換成了p方法,p方法后面的列表中指明列的序號(hào)即可,不需要指明列名。另外,此例中使用了replace方式插入數(shù)據(jù),這會(huì)把表中現(xiàn)有的數(shù)據(jù)都刪除,然后向空表中插入數(shù)據(jù)。

例十一:關(guān)于空值的導(dǎo)入

對(duì)于ixf格式的文件,導(dǎo)入空值非常方便,因?yàn)槔锩嬉呀?jīng)記錄了空值的信息。但是,對(duì)于ASC格式文件就有一定的難度了,因?yàn)镈B2會(huì)直接插入空格,而不是空值。為此,DB2提供了一個(gè)子句進(jìn)行控制:NULL INDICATORS

import from c:org2.txt of asc MODIFIED BY nullindchar=# method l(1 5,6 19,20 25,26 37,38 50) NULL INDICATORS(0,0,0,0,38 ) replace into org

在這個(gè)例子中,NULL INDICATORS子句后面是一個(gè)列表,表示前面四個(gè)字段都不會(huì)存在空值,而第五個(gè)字段從38列開始,可能存在空值,而 MODIFIED BY nullindchar=# 子句表示在文件中第五個(gè)字段如果遇到 # 號(hào),則表示為空值。

裝入(Load)

裝入命令格式與導(dǎo)入類似,命令關(guān)鍵字是Load,但是后面的參數(shù)比導(dǎo)入命令多的多,詳細(xì)用法可以自行參考DB2文檔。

裝入與導(dǎo)入類似,都是將輸入文件中的數(shù)據(jù)移入到目標(biāo)表中,二者的不同點(diǎn)將在實(shí)例中逐步解釋。

在裝入之前,目標(biāo)表必須已經(jīng)存在。裝入的性能比導(dǎo)入高,原因在后面結(jié)合實(shí)例詳細(xì)解釋。裝入操作不記錄到日志中,所以不能使用日志文件進(jìn)行前滾操作。

裝入分為4個(gè)階段:

1. 裝入階段

在這個(gè)階段發(fā)生兩件事:數(shù)據(jù)存儲(chǔ)在表中,收集索引鍵并排序。在裝入時(shí),DBA可以指定多長(zhǎng)時(shí)間生成一致點(diǎn)。它是裝入工具的檢查點(diǎn)。如果裝入在執(zhí)行期間被打斷,它可以從最后一個(gè)一致點(diǎn)處開始繼續(xù)重新執(zhí)行。

2. 構(gòu)建階段

在構(gòu)建階段,基于在裝入階段收集的索引鍵信息創(chuàng)建索引。如果在構(gòu)建階段發(fā)生錯(cuò)誤,裝入工具就重啟,它將從構(gòu)建階段開始處重新開始構(gòu)建。

3. 在刪除階段,所有違反唯一或主鍵約束的行都被刪除并拷貝到一個(gè)異常表(如果在語句中指定相應(yīng)選項(xiàng))中。當(dāng)輸入行被拒絕,消息文件中就生成消息。