Chinaunix

标题: 关于load的问题,急!! [打印本页]

作者: wyaccent    时间: 2006-02-22 11:35
标题: 关于load的问题,急!!
用load数据到表中的时候,如果有键值重复的数据,load本身就把数据delete掉了
我如何知道是文本中的第几条数据重复了呢??

谢谢!!!
作者: 大梦    时间: 2006-02-22 17:10
可以搞一个违例表或是什么dumpfile

格式不正确的行会被拒绝。通过指定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文件中;而如果数据格式正确,但是不满足表的约束条件,该行记录会放到异常表中。

[ 本帖最后由 大梦 于 2006-2-22 17:12 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2