Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2880804
  • 博文数量: 599
  • 博客积分: 16398
  • 博客等级: 上将
  • 技术积分: 6875
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-30 12:04
个人简介

WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606

文章分类

全部博文(599)

文章存档

2014年(12)

2013年(56)

2012年(199)

2011年(105)

2010年(128)

2009年(99)

分类: DB2/Informix

2012-03-27 10:55:05

朋友的一个需求,表上有一个主键ID,有一个导入文件,如果文件中ID在表中存在,

则用文件中的值替换表中的值,否则插入。

 

其实这个问题很简单,用import工具的 insert_update选项即可。

给朋友做了一个小例子:

 

db2 => connect to oracle

   Database Connection Information

 Database server        = DB2/LINUX 9.7.0
 SQL authorization ID   = YANSP
 Local database alias   = ORACLE

db2 => list tables

Table/View                      Schema          Type  Creation time            
------------------------------- --------------- ----- --------------------------
HUATENG                         YANSP           T     2012-03-26-11.07.27.647014
T                               YANSP           T     2012-03-26-11.26.14.809855

  2 record(s) selected.

db2 => create table t1(id int not null primary key,name varchar(15))

DB20000I  The SQL command completed successfully.

db2 => insert into t1 values(1,'a'),(2,'b')

DB20000I  The SQL command completed successfully.

db2 => select * from t1

ID          NAME          
----------- ---------------
          1 a             
          2 b             

  2 record(s) selected.

db2 => ! cat test.txt

1,"huateng"
2,"yanshoupeng"
3,"xuyan"
4,"nongshang"

db2 => import from test.txt of del  messages msg.txt  insert_update into t1

Number of rows read         = 4
Number of rows skipped      = 0
Number of rows inserted     = 2
Number of rows updated      = 2
Number of rows rejected     = 0
Number of rows committed    = 4

db2 => select * from t1

ID          NAME          
----------- ---------------
          1 huateng       
          2 yanshoupeng   
          3 xuyan         
          4 nongshang     

  4 record(s) selected.

db2 =>


如果不是文件而是表的话,可以采用MERGE语句来实现。


db2 => connect to sample

   数据库连接信息
 数据库服务器         = DB2/NT 9.7.4
 SQL 授权标识         = YAN
 本地数据库别名       = SAMPLE
db2 => create table t1(c1 int,c2 char(1))

DB20000I  SQL 命令成功完成。

db2 => create table t2(c1 int,c2 char(1))

DB20000I  SQL 命令成功完成。

db2 => insert into t1 values (1,'1'),(2,'2'),(3,'3'),(4,'4')

DB20000I  SQL 命令成功完成。

db2 => insert into t2 values (1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e')

DB20000I  SQL 命令成功完成。

db2 => select * from t1
C1          C2
----------- --
          1 1
          2 2
          3 3
          4 4
  4 条记录已选择。

db2 => select * from t2
C1          C2
----------- --
          1 a
          2 b
          3 c
          4 d
          5 e
  5 条记录已选择。

db2 => merge into t1 using t2 on t1.c1=t2.c1 when matched then update set t1.c2=t2.c2 when not matched then insert values(t2.c1,t2.c2)

DB20000I  SQL 命令成功完成。

db2 => select * from  t1
C1          C2
----------- --
          1 a
          2 b
          3 c
          4 d
          5 e
  5 条记录已选择。

db2 => select * from t2
C1          C2
----------- --
          1 a
          2 b
          3 c
          4 d
          5 e
  5 条记录已选择。
db2 =>

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