WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606
全部博文(599)
分类: 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 =>