Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101948009
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 00:11:28

  下面我们看一些LOAD命令特有的功能,IMPORT命令也能做的就不再详细说了。

  例十二:从光标类型文件中进行装入
  定义一个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中。

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

阅读(679) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~