技术开发 频道

DB2中的数据移动详解

    例十二:从光标类型文件中进行装入

    定义一个cursor

declare mycur cursor for select * from org

    创建一个新表,结构与cursor相容

create table org2 like org

    从cursor中装入

load from mycur of cursor insert into org2

    除了可以从cursor中装入,还可以从文件、管道、设备中进行装入。而导入命令只能从文件中导入。

    例十三:关于异常表

    由用户定义的异常表可以用于存储不遵循唯一约束和主码约束的行。如果装入的时候没有指定异常表,则违反唯一约束的行将被丢弃并且将不再有机会恢复或修改。

    用SAMPLE数据库中的STAFF表做实验

    1. 创建一个结构与STAFF表相同的表STAFF1

    CREATE TABLE STAFF1 LIKE STAFF

    2. 把STAFF表中的一部分数据插入到STAFF1中

    INSERT INTO STAFF1 SELECT * FROM STAFF WHERE ID<=160

    3. 再创建一个结构与STAFF1相同的表STAFFEXP,作为异常表

    CREATE TABLE STAFFEXP LIKE STAFF1

    4. 给该异常表添加一列,因为异常表和普通表相比,前面的结构都相同,就是最后多出一列或两列(列名任意),第一列是时间戳类型,记录异常记录插入的时间,第二列是大文本类型(至少为32K大小),保存导致该条记录被拒绝的特定约束信息。本例中只添加一个时间戳列。

    ALTER TABLE STAFFEXP ADD COLUMN TIME TIMESTAMP

    5. 为STAFF1表创建一个唯一索引

    CREATE UNIQUE INDEX IDXSTAFF ON STAFF1(ID)

    6. 先运行导出命令做出一个文本文件

    EXPORT TO D:STAFF.TXT OF DEL SELECT * FROM STAFF

    7. 然后运行装入命令把数据再装入到STAFF1表中

    LOAD FROM D:STAFF.TXT OF DEL INSERT INTO STAFF1 FOR EXCEPTION STAFFEXP

    由于表STAFF1中有唯一索引,所以会有一部分数据因为违反这个约束条件而不能插入到STAFF1表中,这些记录就会插入到异常表STAFFEXP中。

    注意一点,异常表必须自己先定义好,装入命令不能够自动生成异常表,如果找不到指定的异常表,就会报错。     

    例十四:关于DUMP文件

    格式不正确的行会被拒绝。通过指定DUMPFILE文件类型修饰符可以使这些被拒绝的记录单独放在指定的文件里。

    用SAMPLE数据库中的STAFF表做实验

    1. 创建一个结构与STAFF表相同的表STAFF1

    CREATE TABLE STAFF1 LIKE STAFF

    2. 把STAFF表中的一部分数据插入到STAFF1中

    INSERT INTO STAFF1 SELECT * FROM STAFF WHERE ID<=160

    3. 再创建一个结构与STAFF1相同的表STAFFEXP,作为异常表

    CREATE TABLE STAFFEXP LIKE STAFF1

    4. 给该异常表添加一列

    ALTER TABLE STAFFEXP ADD COLUMN TIME TIMESTAMP

    5. 为STAFF1表创建一个唯一索引

    CREATE UNIQUE INDEX IDXSTAFF ON STAFF1(ID)

    6. 先运行导出命令做出一个文本文件

    EXPORT TO D:STAFF.TXT OF DEL SELECT * FROM STAFF

    到D盘上打开STAFF.TXT文件,把第一列等于320的行替换为:"abcf","aaa","sdfg"

    7. 然后运行装入命令把数据再装入到STAFF1表中

    LOAD FROM D:STAFF.TXT OF DEL MODIFIED BY DUMPFILE=d:dump INSERT INTO STAFF1 FOR EXCEPTION STAFFEXP

    装入的结果报告中会有如下一条:

    SQL3118W 在行 "32" 列 "1" 中的字段值不能转换为 SMALLINT 值,但是目标列不可为空。未装入该行。

    SQL3185W 当处理输入文件的第 "32" 行中的数据时发生先前的错误。

    打开D盘的dump.000文件,会看到造成异常的那一行数据:"abcf","aaa","sdfg"

    通过这个例子,我们可以理解,如果一行数据的格式不正确,在装入的时候会遭到拒绝,该行记录会放到DUMP文件中;而如果数据格式正确,但是不满足表的约束条件,该行记录会放到异常表中。

0
相关文章