DB2数据的导入&导出DB2数据的导入(Import)导出(Export)(Load)DB2中所谓的数据移动,包括:1.数据的导入(Import)2.数据的导出(Export)3.数据的装入(Load)导入和装入都是利用DB2的相关命令把某种格式的文件中的数据保存到数据库中的表中导出是指把DB2数据库的表中的数据保存到某种格式的文件当中去数据移动的作用:如果要在不同的数据库管理系统之间转移数据,数据移动通常是最实用的一种方法,因为任何一种数据库管理系统都支持常用的几种文件格式,通过这个通用的接口,就很容易实现不同系统间数据的转移。这三个命令中,Export最简单,因为从表中向文件转移数据,通常不会出现错误,也不会有非法的数据。在讲解命令之前,首先介绍一下文件的格式,用于DB2数据移动的文件格式有四种:1.ASC——非定界ASCII文件,是一个ASCII字符流。数据流中的行由行定界符分隔,而行中的每一列则通过起始和结束位置来定义。例如:10HeadOffice160CorporateNewYork15NewEngland50EasternBoston20MidAtlantic10EasternWashington38SouthAtlantic30EasternAtlanta42GreatLakes100MidwestChicago51Plains140MidwestDallas66Pacific270WesternSanFrancisco84Mountain290WesternDenver2.DEL——定界ASCII文件,也是一个ASCII字符流。数据流中的行由行定界符分隔,行中的列值由列定界符分隔。文件类型修饰符可用于修改这些定界符的默认值。例如:10,HeadOffice,160,Corporate,NewYork15,NewEngland,50,Eastern,Boston20,MidAtlantic,10,Eastern,Washington38,SouthAtlantic,30,Eastern,Atlanta42,GreatLakes,100,Midwest,Chicago51,Plains,140,Midwest,Dallas66,Pacific,270,Western,SanFrancisco84,Mountain,290,Western,Denver3.WSF——(worksheetformat)为工作表格式,用于与Lotus系列的软件进行数据交换。4.PC/IXF——是集成交换格式(IntegrationExchangeFormat,IXF)数据交换体系结构的改编版本,由一些列可变长度的记录构成,包括头记录、表记录、表中每列的列描述符记录以及表中每行的一条或多条数据记录。PC/IXF文件记录由包含了字符数据的字段组成。第一部分:数据的导出(Export)例一:把Org表中的所有数据导出到文件C:\ORG.TXT中。Exporttoc:\org.txtofdelselect*fromorg其中,ofdel表示导出到的文件的类型,在本例中导出到一个非定界文本文件中;后面的select*fromorg是一个SQL语句,该语句查询出来的结果就是要导出的数据。例二:改变del格式文件的格式控制符exporttoc:\staff.txtofdelmodifiedbycoldel$chardel''decplusblankselect*fromstaff在该例中,modified子句用于控制各种符号,coldel表示字段之间的间隔符,默认情况为逗号,现在改为$号;chardel表示字符串字段用什么符号引用,默认情况下为一对双引号括起来,现在改为用一对单引号括起来;decplusblank表示对于十进制数据类型,用空格代替最前面的加号,因为默认情况下会在十进制数据前面加上正负号的。例三:以ASC格式将数据导出到文件Export命令是不支持ASC格式文件的,所以如果想导出ASC这样规整的格式,需要程序员自己进行转换操作,思路是将各种数据类型都转换成定长字符串,然后把各个要导出的字段合并成为一个字段。例如创建如下结构的表n:createtablen(aint,bdate,ctime,dvarchar(5),echar(4),fdouble)然后插入两条数据:insertintonvalues(15,'2004-10-21','23:12:23','abc','hh',35.2)insertintonvalues(5,'2004-1-21','3:12:23','bc','hhh',35.672)要想把这两条数据以规整的格式导出到文件中,进行如下操作:exporttoc:\test.txtofdelselectchar(a)||char(b)||char(c)||char(d,5)||e||char(f)astmpfromn这样导出的结果与ASC格式的文件非常类似,只是每一行的前后多出了一对双引号,对此我们可以使用文本工具(如写字板、记事本等)把双引号删除掉,也可以置之不理,在以后导入的时候直接控制格式(忽略双引号)在文件中的格式为:152004-10-2123.12.23abchh3.52E152004-01-2103.12.23bchhh3.5672E1例四:大数据的导出exporttod:\myfile.delofdellobstod:\lob\lobfilelobsmodifiedbylobsinfileselect*fromemp_photo该命令把emp_photo表的数据导出到d:\myfile.del文件中,其结果为:pre;000130,bitmap,lobs.001.0.43690/000130,gif,lobs.001.43690.29540/000130,xwd,lobs.001.73230.45800/000140,bitmap,lobs.001.119030.71798/000140,gif,lobs.001.190828.29143/000140,xwd,lobs.001.219971.73908/000150,bitmap,lobs.001.293879.73438/000150,gif,lobs.001.367317.39795/000150,xwd,lobs.001.407112.75547/000190,bitmap,lobs.001.482659.63542/000190,gif,lobs.001.546201.36088/000190,xwd,lobs.001.582289.65650//pre;其中第三个字段是BLOB类型,在该文件中只保存了一个标志,相当于一个指针,真正的LOB数据保存在d:\lob目录下的lobs.001、lobs.002、......等一系列文件中。命令中lobsto后面指定大对象数据保存在什么路径下(注意,该路径必须事先已经存在,否则会报错),lobfile后面指定大对象数据保存在什么文件中,不要指定扩展名,DB2会根据数据量自动追加.001、.002等扩展名,同时不要忘记加上modifiedbylobsinfile子句。例五:把导出信息保存在消息文件中。exporttod:\awards.ixfofixfmessagesd:\msgs.txtselect*fromstaffwheredept=20这个例子把staff表中dept=20的数据导出到d:\awards.ixf文件中,所有的导出信息都保存在d:\msgs.txt文件中(无论是成功、警告还是失败信息),这样,管理员可以通过观察信息文件找到问题所在。例六:给导出数据列重命名。exporttod:\awards.ixfofixfmethodn(c1,c2,c3,c4,c5,c6,c7)messagesd:\msgs.txtselect*fromstaffwheredept=20在默认情况下,导出的每一列数据以表中对应的字段名自动命名,我们可以通过methodn子句给每一列重新命名,需要注意的是,这个子句只在ixf和wsf格式文件中有效,在文本文件中不能使用。数据的导入例七:把C盘根目录下的org.txt文件中的数据导入到org表中importfromc:\org.txtofdelinsertintoorg导入命令和导出命令的格式基本上处于对应的关系,import对应export,from对应to,文件名和文件格式代表的含义相同,但是导入命令支持ASC格式的文件,而导出命令不支持。另外,在导出命令的最后是一个SQL语句,用于选择要导出的数据,而导入命令最后不是SQL语句,而是插入数据的方式以及目标表名称。例八:从ASC格式文件中导入数据importfromc:\org2.txtofascmethodl(15,619,2025,2637,3850)insertintoorg其中methodl子句用于指定文本文件中每一个字段的起始位置和终止位置,每个起始位置和终止位置间用空格分开,字段之间用逗号分开。除了l方法之外,还有n方法和p方法,下面会叙述。例九:利用n方法导入数据,并且创建新表。首先导出一个用例文件:exporttod:\org.ixfofixfmethodn(a,b,c,d,e)select*fromorg这样org.ixf文件中有五列数据,对应的列名分别为a、b、c、d、e然后在从该文件中导入数据到一个新表中importfromd:\org.ixfofixfmethodn(d,e,b)replace_createintoorgtest该命令从文件中选取三列导入到表中,顺序可以不按照文件中原有的列的顺序。replace_create方式的叙述见下。插入方式有:INSERT方式——在表中现有数据的基础之上追加新的数据。INSERT_UPDATE方式——这种方式只能用于有主键的表,如果插入的数据与原有数据主键不冲突,则直接插入,如果主键冲突,则用新的数据代替原有数据。REPLACE方式——先把表中现有的数据都删除,然后向空表中插入数据。REPLACE_CREATE方式——表示如果表存在,则先把表中的数据都删除,然后向空表中插入数据;如果表不存在,则先根据文件中的字段创建表,然后再向表中插入数据。这种方式只能把IXF格式的文件中的数据插入到表中。例十:利用p方法导入数据importfromd:\org.ixfofixfmethodp(4,5,2)replaceintoorgtest该例子执行的效果和例九类似,只是把n方法换成了p方法,p方法后面的列表中指明列的序号即可,不需要指明列名。另外,此例中使用了replace方式插入数据,这会把表中现有的数据都删除,然后向空表中插入数据。例十一:关于空值的导入对于ixf格式的文件,导入空值非常方便,因为里面已经记录了空值的信息。但是,对于ASC格式文件就有一定的难度了,因为DB2会直接插入空格,而不是空值。为此,DB2提供了一个子句进行控制:NULLINDICATORSimportfromc:\org2.txtofascMODIFIEDBYnullindchar=#methodl(15,619,2025,2637,3850)NULLINDICATORS(0,0,0,0,38)replaceintoorg在这个例子中,NULLINDICATORS子句后面是一个列表,表示前面四个字段都不会存在空值,而第五个字段从38列开始,可能存在空值,而MODIFIEDBYnullindchar=#子句表示在文件中第五个字段如果遇到#号,则表示为空值。就说这些吧,抛砖引玉,希望大家补充,下一次谈一谈Load命令。装入(Load)装入命令格式与导入类似,命令关键字是Load,但是后面的参数比导入命令多的多,详细用法可以自行参考DB2文档。装入与导入类似,都是将输入文件中的数据移入到目标表中,二者的不同点将在实例中逐步解释。在装入之前,目标表必须已经存在。装入的性能