`

oracle用merge更新表中数据

阅读更多

Merge into是oracle从9i开始增加的一个语句,从merge的字面上的意思:合并,兼并不难理解merge在oracle中的含义,merge在oracle所起的作用是:如果你从以组值中有选择的更新和插入到到一张表,具体来说是:如果该表中已经匹配了这组值的某些条件,那么可以使用这组值的部分数据来更新这个表的,如果该表中无法匹配了这组值的某些条件,那么可以使用这组值的数据来为这个表新增一条数据。
无论你在使用任何DBMS,你总是难以避免的将会遇到上面提到的这种需求,如果你不使用merge语句,你将会不得不在程序中增加大段的代码,或者是在oracle用很长的代码来实现。好在现在我们有了merge,可以帮我们省下很多时间。
好了废话少说:
Merge 的基本语法是这样的
Merge into table[alias]
Using table or sql query [alias]
On condition
When matched then
Update set ….
When not matched then
Insert values…
以上是merge的基本语法,其中
alias是为表或者查询写的别名
如果你看着空洞的语法觉得头很痛,看下面的例子吧
首先我们创建两个表
create table test1(id int,name varchar(20));
create table test2(id int,name varchar(20))
然后随意插入几行数据
insert into test1 values(1,’hi’);
insert into test1 values(2,’hello’);
insert into test2 values(2,’你好’);
insert into test2 values(3,’morning’);
下面我们要使用了merge了,将test2中的数据有选择地转移或者更新到test1中
如果你运行了下下面的merge语句,你将会的到一个错误,这是因为oracle规定在merge语句中不能更新作为连接的列,也就是on后面的那些列
merge into test1 t1
using test2 t2
on (t1.id = t2.id)
when matched then
update set t1.id = t2.id
when not matched then
insert values(t2.id,t2.name);
所以将会得到如下的错误,虽然这个错误翻译的并不怎么样,甚至带有明显的误导
on (t1.id = t2.id)
*
ERROR 位于第 3 行:
ORA-00904: “T1″.”ID”: 无效的标识符
好了,知错就改,我们再来运行下面的merge语句。
merge into test1 t1
using test2 t2
on (t1.id = t2.id)
when matched then
update set t1.name = t2.name
when not matched then
insert values(t2.id,t2.name)
成功执行了,我们来验证一下。
select * from test1;

ID NAME
—— —————-
1 hi
2 你好
3 morning
至此,你已经掌握了merge语句中的大部分。但我们还要提醒一些特殊情况。
如果我们再向test2中增加一条语句
insert into test2 values(2,’早’)
再执行我们以已经成功执行过的merge语句,将会遇到下面的错误
SQL> merge into test1 t1
2 using test2 t2
3 on (t1.id = t2.id)
4 when matched then
5 update set t1.name = t2.name
6 when not matched then
7 insert values(t2.id,t2.name)
8 ;
using test2 t2
*
ERROR 位于第 2 行:
ORA-30926: 无法在源表中获得一组稳定的行
这是因为当执行到t1.id = t2.id =2时,test2表中对应了两条记录,无法进行更新或者插入。所以就出错了。所以你应该明白oracle中的merge语句应该保证on中的条件的唯一性,
另外一点需要说明的是using关键字后面可以接表,当然也可以接其他的select语句做出来的一个类视图,oracle中的这种结构,我们在前面已经介绍多次,在此不作介绍。

分享到:
评论

相关推荐

    oracle使用 merge 更新或插入数据(总结)

    oracle使用 merge 更新或插入数据(总结)

    Oracle中merge into的使用

    在Oracle数据库中,`MERGE INTO`语句是一种强大的数据操作工具,它允许你在一个步骤中执行更新(UPDATE)和插入(INSERT)操作,从而提高了数据处理的效率和灵活性。这个命令尤其适用于需要同步两个表的数据时,比如...

    Oracle merge into用法

    在Oracle数据库中,`MERGE INTO`语句是一种非常强大的工具,它允许用户根据源表中的数据更新目标表,同时也可以插入新记录。这一特性在处理大量数据时尤其有用,因为它能够在一个步骤中完成更新和插入操作,从而提高...

    Oracle_merge

    此外,`MERGE` 语句还可以结合 `DELETE` 功能,允许在同一步骤中更新现有记录的同时删除旧记录。 #### 五、示例分析 以下是一个具体的例子,通过该示例我们可以更深入地理解 `MERGE` 语句的工作机制。 1. **创建...

    oracle merge 用法详解

    如果我们只想将`NEWPRODUCTS`表中没有出现在`PRODUCTS`表中的新数据插入,而不做更新,则可以省略`UPDATE`子句,仅保留`INSERT`子句。 ```sql MERGE INTO PRODUCTS p USING NEWPRODUCTS np ON (p.PRODUCT_ID =...

    浅谈Oracle数据库中Merge Into的用法.pdf

    在实际应用中,Merge Into 语句可以用来实现各种数据同步和数据migration的任务,例如用 B 表来更新 A 表中的数据,如果 A 表中没有,则把 B 表的数据插入 A 表。Merge Into 语句可以帮助我们简化数据处理的过程,...

    利用 sqluldr2导出数据 使用sqlldr导入数据 通过merge into 合并更新数据

    - 使用`MERGE INTO`语句,根据业务逻辑,将导入的数据与原表进行合并,完成数据的更新和插入。 在实际操作中,我们还需要考虑错误处理、性能优化等问题。例如,为提高数据导入速度,可以使用并行加载选项;为了保证...

    Oracle两张表关联批量更新其中一张表的数据

    方法一(推荐): UPDATE 表2 ...尤其注意最后的外层where条件尤为重要,是锁定其批量更新数据的范围。 方法二: MERGE INTO 表2 USING 表1 ON (表2.A = 表1.A) -- 条件是 A 相同 WHEN MATCHED THEN UP

    oracle merge into的使用

    描述详解:Oracle Merge Into 是一个功能强大的SQL语句,它在Oracle数据库系统中被广泛用于处理数据同步、更新或插入操作。与传统的UPDATE和INSERT语句相比,Merge Into 提供了更为灵活和高效的数据管理方式。在...

    oracle Merge 函数.doc

    Oracle Merge 函数是一种强大的数据操作语句,用于从一个表中选择一些数据更新或者插入到另一个表中。Merge 函数的使用方式有三种:只更新不插入、只插入不更新和既插入也更新。 Merge 函数的基本用法 Merge ...

    oracle使用 merge

    在Oracle数据库管理中,`MERGE`语句是一种强大的功能,它允许用户根据源表中的数据更新目标表,同时也可以向目标表中插入新的记录。这使得`MERGE`成为处理大量数据时的一个高效工具,特别是在需要同步两个数据集的...

    Oracle merge合并更新函数实例详解

    在提供的示例中,我们看到如何使用MERGE语句来更新或插入数据到`t_config_related`表。假设我们要根据某个序列号(seq)来更新或插入数据: ```sql MERGE INTO t_config_related A1 USING (select '97547758-6f85-...

    为什么oracle有时不用索引来查找数据

    8. **统计数据的准确性**:对数据频繁更新的表应该定期进行分析,以便Oracle能够收集到准确的统计数据,从而做出正确的执行计划选择。 9. **索引列的选择性**:如果索引列的选择性不高,即包含的唯一值很少,Oracle...

    oracle中merge into用法及实例解析

    Oracle中的`MERGE INTO`语句是一种强大的数据操作工具,它结合了`UPDATE`和`INSERT`的功能,可以根据源表(source-table)和目标表(target-table)之间的匹配条件进行数据的更新或插入。这个语句的主要目的是提高...

    Oracle 大数据量操作性能优化

    分区是 Oracle 中的一种优化技术,可以将大型表分割成多个小表,提高查询速度和数据处理效率。Oracle 建议,当表大小超过 2G 或者表有历史数据和当前数据之分时,考虑使用分区。 分区的种类有多种,包括范围分区、...

    oracle数据表分区知识

    ### Oracle 数据表分区详解 #### 一、分区表理论知识 Oracle 提供了表分区功能以支持非常大型的数据库(VLDB)。通过分区技术,可以根据指定的分区键将数据分散到不同的物理位置,从而实现更高效的数据管理和查询...

    Mybatis批量foreach merge into的用法

    Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不存在则插入。下面是该方法的详细介绍: ...

Global site tag (gtag.js) - Google Analytics