如果你是Oraclemergeinto即Oracle9I中加入了MERGE用法及例子方面的新手,对Oraclemergeinto即Oracle9I中加入了MERGE用法及例子的相关实际应用不是很了解的话,以下的文章会给你提供更全面的知识。

语法:

    MERGE[hint]INTO[schema.]table[t_alias] USING[schema.]{table|view|subquery}[t_alias] ON(condition) WHENMATCHEDTHENmerge_update_clause WHENNOTMATCHEDTHENmerge_insert_clause;

创建测试数据表:

    createtabletj_test(idnumber,namevarchar2(20),agenumber);

向表中插入数据:

    insertintotj_testvalues(1,'jan',23); insertintotj_testvalues(2,'kk',22); insertintotj_testvalues(3,'joe',27); select*fromtj_test;

查询结果如下:

1 jan 23

2 kk 22

3 joe 27

创建另一新表

    createtabletj_test1asselect*fromtj_testwhere1=0

插入一条数据

    insertintotj_test1values(1,'jlk',23); select*fromtj_test1

查询结果如下:

1 jkl 23 –注意,这里的的NAME字段中的值是jkl

使用MERGE,实现有则更新,无则插入,sql语句如下:

    Oraclemergeintotj_test1tt1 usingtj_testtt on(tttt1.id=tt.id) whenmatchedthen updateset tttt1.name=tt.name, tttt1.age=tt.age whennotmatchedthen insertvalues( tt.id, tt.name, tt.age)

查询tj_test1表(对比原来表中的数据,更新了ID=1 ROW中字段NAME,同时多出两条新数据)

    select*fromtj_test1

改变行数据如下:

1 jan 23 –这里的原有jkl值被更新

3 joe 27 –原来表中没有的插入

2 kk 22 –原来表中没有的插入

如果存在就更新,不存在就插入

9i已经支持了,是Merge,但是只支持select子查询,

如果是单条数据记录,可以写作select …… from dual的子查询。

语法为:

    mergeintotable USINGdata_source ON(condition) WHENMATCHEDTHENupdate_clause WHENNOTMATCHEDTHENinsert_clause;

如:

    Oraclemergeintocoursec USING(SELECTcourse_name,period, course_hours FROMcourse_updates)cu ON(c.course_name=cu.course_name ANDc.period=cu.period) WHENMATCHEDTHEN UPDATE SETc.course_hours=cu.course_hours WHENNOTMATCHEDTHEN INSERT(c.course_name,c.period, c.course_hours) VALUES(cu.course_name,cu.period, cu.course_hours);

上述的相关内容就是对Oraclemerge into用法及例子的描述,希望会给你带来一些帮助在此方面。

【编辑推荐】

    Oracle数据库调试和优化详解Oracle数据库中归档进程ARCH的详细阐述Oracle join的实际应用代码介绍Oracle join的实际应用代码介绍Oracle 10g 数据泵学习纪要概述