oracle的merge语法

oracle的merge语法

merge into trade.ttradeseat ausing trade.bs_zrt_tradeseat bon (a.L_FUND_ID = b.l_Fund_Id and a.l_basecombi_id = b.l_basecombi_id and a.vc_seat_id = b.vc_seat_id and a.c_market_no =b.c_market_no)when not matched theninsert(L_FUND_ID, L_BASECOMBI_ID, VC_SEAT_ID, C_MARKET_NO, c_trade)values(b.L_FUND_ID, b.L_BASECOMBI_ID, b.vc_seat_id, b.c_market_no, b.c_trade);

merge语法是根据源表对⽬标表进⾏匹配查询,匹配成功时更新,不成功时插⼊。

其基本语法规则是merge into ⽬标表 a

using 源表 b

on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)

when matched then update set a.更新字段=b.字段

when not macthed then insert into a(字段1,字段2……)values(值1,值2……)

变种写法①,只更新:merge into ⽬标表 a

using 源表 b

on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)

when matched then update set a.更新字段=b.字段,a.更新字段2=b.字段2……

变种写法②,只插⼊:merge into ⽬标表 a

using 源表 b

on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)

when not macthed then insert into a(字段1,字段2……)values(值1,值2……)

注:条件字段不可更新

对于Oracle来说,merge是9i新增的语法,在10g进⾏了⼀些增强,如下:

测试环境:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

①条件操作:

merge into ⽬标表 a

using 源表 b

on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)

when matched then update set a.更新字段=b.字段 where 限制条件

when not macthed then insert into a(字段1,字段2……)values(值1,值2……) where 限制条件

举例:merge into test_merge ausing test bon(a.no=b.no)when matched then update set a.no2=b.no2 where a.no<>1when not matched then insert values(b.no,b.no2) where a.no<>100当然也⽀持变种①②的写法

②删除操作

merge into ⽬标表 a

using 源表 b

on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)

when matched then update set a.更新字段=b.字段

delete where b.字段=xxx

举例:merge into test_merge ausing test bon(a.no=b.no)when matched then update set a.no2=b.no2 where a.no<>1deletewhere b.no=14

备注:删除动作针对的也是⽬标表,并且必须在语句最后

基本上merge的⽤法就是以上这些,建议平常可以多⽤,⽐单独的update+insert的⽅式效率要更⾼,尤其是on条件下有唯⼀索引的时候,效率更⾼

合集下载

oracle insert or update语句写法

oracle insert or update语句写法

1 / 2 oracle insert or update语句写法 在 Oracle 数据库中,你可以使用 MERGE 语句执行插入(INSERT)或更新(UPDATE)的操作。MERGE 语句允许你在一个操作中执行插入、更新和删除,具体操作取决于目标表中是否存在匹配的行。 以下是一个基本的 MERGE 语句的写法,以进行插入或更新: MERGE INTO target_table USING source_table ON (condition) WHEN MATCHED THEN UPDATE SET column1 = value1, column2 = value2, ...; WHEN NOT MATCHED THEN INSERT (column1, column2, ...) VALUES (value1, value2, ...); 具体使用时,你需要替换以下内容: target_table:目标表的名称。 source_table:源表的名称或子查询,用于提供要插入或更新的数据。 condition:用于指定匹配行的条件。 column1, column2, ...:要更新或插入的列。 value1, value2, ...:相应列的值。 示例:

2 / 2 MERGE INTO employees_target USING employees_source ON (employees_target.employee_id = employees_source.employee_id) WHEN MATCHED THEN UPDATE SET employees_target.salary = employees_source.salary WHEN NOT MATCHED THEN INSERT (employee_id, salary) VALUES (employees_source.employee_id, employees_source.salary); 上述示例假设你有两个表,employees_target 和 employees_source,通过员工ID匹配。如果员工ID存在于 employees_target 中,则更新薪水;否则,插入新的员工记录。 请注意,MERGE 语句的使用需要小心,确保合适的条件和列被指定,以防止不必要的插入或更新。

SQL中Merge用法详解

SQL中Merge用法详解

SQL中Merge⽤法详解

MERGE语句是SQL语句的⼀种。在SQL Server、Oracle数据库中可⽤,MySQL、PostgreSQL中不可⽤。MERGE是Oracle9i

新增的语法,⽤来合并UPDATE和INSERT语句。通过MERGE语句,根据⼀张表(原数据表,source table)或⼦查询的连

接条件对另外⼀张(⽬标表,target table)表进⾏查询,连接条件匹配上的进⾏UPDATE,⽆法匹配的执⾏INSERT。这个语

法仅需要⼀次全表扫描就完成了全部⼯作,执⾏效率要⾼于INSERT+UPDATE。

merge主要⽤于两表之间的关联操作

oracle中 merge:

从oracle 9i开始⽀持merge⽤法,10g有了完善

create table a (id_ integer,count_ integer);

insert into a values(1,3);

insert into a values(3,6);

create table b (id_ integer,count_ integer);

insert into b values(1,7);

insert into b values(2,4);

MERGE INTO a

USING b

ON (a.id_ = b.id_)

WHEN MATCHED THEN

UPDATE SET count_ = b.count_+a.count_ /* 注意指名count_属于的表 */

WHEN NOT MATCHED THEN

INSERT VALUES (b.id_,b.count_);

commit;

select * from a;

结果:

id_ count_

1 10

3 6

2 4

SQL Server 2008开始⽀持merge:

有两张结构⼀致的表:test1,test2

create table test1

(id int,name varchar(20))

merge用法

merge用法

Oracle Merge into 详细介绍

/*Merge into 详细介绍

MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。

通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,

连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。

这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。

*/

/*語法:

MERGE [INTO [schema .] table [t_alias]

USING [schema .] { table | view | subquery } [t_alias]

ON ( condition )

WHEN MATCHED THEN merge_update_clause

WHEN NOT MATCHED THEN merge_insert_clause;

*/

语法:

MERGE INTO [your table-name] [rename your table here]

USING ( [write your query here] )[rename your query-sql and using just like a table]

ON ([conditional expression here] AND [...]...)

WHEN MATHED THEN [here you can execute some update sql or something else ]

WHEN NOT MATHED THEN [execute something else here ! ]

/*

我们还是以《sql中的case应用》中的表为例。在创建另两个表fzq1和fzq2

*/ --全部男生记录

create table fzq1 as select * from fzq where sex=1;

merge into 用法

merge into 用法

merge into 用法

merge into是oracle的一种更新语法,分为两个部分:merge into和using。一般语法格式如下:

merge into

using

on

when matched then 。

[update set = ]。

when not matched then 。

[insert into = ];。

merge into用于实现针对目标表和源表的更新操作,它可以在不同表之间合并操作,用于如下情况:

1.将源表中没有但目标表中有的记录插入到目标表中去;

2.将源表中有但目标表中没有的记录插入到目标表中去;

3.将源表中有目标表中也有的记录的某些列的值更新到目标表中去。

Merge into使用Update和Insert两种语法,类似于创建触发器,但不需要创建触发器就能实现更新。它可以减少更新时间,提高程序性能,是一种高效的语法。

Oracle数据库中Merge Into用法论文

Oracle数据库中Merge Into用法论文

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

摘要:merge into语句是oracle从9i开始新增的一种语法,是oracle中的一个非常有用的功能,它主要用来合并update和insert语句,即用一个表中的数据来修改或插入到另一个表中,是update还是insert主要依据于所指定的条件判断的,它的主要原则是“有则更新,无则插入”,比如说要用merge into来实现用b表来更新a表中的数据,如果a表中没有,则把b表的数据插入a表。在使用dbms过程中,我们总是难以避免的遇到像这样的需求,如果不使用merge into语句,我们将不得不在程序中增加大段的代码,这样实现起来不仅费时麻烦而且容易出错。

关键词:用途语法操作改进

1 merge into语句在oracle中的用途

merge into语句是oracle从9i开始新增的一种语法,是oracle中的一个非常有用的功能,它类似于mysql中的insert into on

duplicate key。

单从字面意思上来看,merge是合并、兼并的意思,顾名思义,merge into的用途就是对目标表进行匹配,并根据是否匹配条件进行分别处理,它主要用来合并update和insert语句,即用一个表中的数据来修改或插入到另一个表中。通过merge into语句,我们能够在一个语句中对一个表同时执行insert和update操作,根据这个表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行update操作,并且在其后面还可接删除操作,无法匹

配的执行insert,它能减少执行多条insert和update语句,且插入或者修改的操作取决于on子句的条件。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于insert+update。

oracle中mergeinto用法及实例解析

oracle中mergeinto用法及实例解析

oracle中mergeinto⽤法及实例解析

merge into的形式:

MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...)

WHEN MATCHED THEN

[UPDATE sql]

WHEN NOT MATCHED THEN

[INSERT sql]

作⽤:判断B表和A表是否满⾜ON中条件,如果满⾜则⽤B表去更新A表,如果不满⾜,则将B表数据插⼊A表但是有很多可选

项,如下:

1.正常模式

2.只update或者只insert

3.带条件的update或带条件的insert

4.全插⼊insert实现

5.带delete的update(觉得可以⽤3来实现)

下⾯⼀⼀测试。

测试建以下表:

create table A_MERGE

(

id NUMBER not null,

name VARCHAR2(12) not null,

year NUMBER

);

create table B_MERGE

(

id NUMBER not null,

aid NUMBER not null,

name VARCHAR2(12) not null,

year NUMBER,

city VARCHAR2(12)

);

create table C_MERGE

(

id NUMBER not null,

name VARCHAR2(12) not null,

city VARCHAR2(12) not null

);

commit;

其表结构截图如下图所⽰:

A_MERGE表结构:

B_MERGE表结构

C_MERGE表结构

1.正常模式

先向A_MERGE和B_MERGE插⼊测试数据:

insert into A_MERGE values(1,'liuwei',20);

Mergeinto使用详解

Mergeinto使⽤详解

Merge是⼀个⾮常有⽤的功能,类似于Mysql⾥的insert into on duplicate key.

Oracle在9i引⼊了merge命令,

通过这个merge你能够在⼀个SQL语句中对⼀个表同时执⾏inserts和updates操作. 当然是update还是insert是依据于你的指定的条件判断

的,Merge into可以实现⽤B表来更新A表数据,如果A表中没有,则把B表的数据插⼊A表. MERGE命令从⼀个或多个数据源中选择⾏来updating或inserting到⼀个或多个表

语法如下 MERGE INTO [your table-name] [rename your table here]

USING ( [write your query here] )[rename your query-sql and using just like a table]

ON ([conditional expression here] AND [...]...)

WHEN MATHED THEN [here you can execute some update sql or something else ]

WHEN NOT MATHED THEN [execute something else here ! ]

我们先看看⼀个简单的例⼦,来介绍⼀个merge into的⽤法 merge into products p using newproducts np on (p.product_id = np.product_id)

when matched then

update set p.product_name = np.product_name

when not matched then

insert values(np.product_id, np.product_name, np.category)

ORACLE批量更新四种方法

ORACLE批量更新四种方法

1.使用MERGE语句:

MERGE语句是ORACLE中用于合并数据的语句,它可以用于批量更新操作。MERGE语句将两个表连接起来,并根据指定的条件来更新目标表中的数据。使用MERGE语句进行批量更新的步骤如下:

(1)创建一个临时表或使用已有的表来存储要更新的数据。

(2)使用MERGE语句将临时表与目标表连接起来,并指定更新条件。

(3)在MERGE语句中指定更新操作,例如更新目标表中的一些列。

(4)执行MERGE语句,完成批量更新操作。

2.使用子查询:

子查询是一种在ORACLE中进行数据操作的方法,可以将一个查询的结果作为另一个查询的输入。使用子查询进行批量更新的步骤如下:

(1)创建一个包含要更新的数据的子查询。

(2)编写一个主查询,将子查询的结果与目标表进行连接,并指定更新条件。

(3)在主查询中指定更新操作,例如更新目标表中的一些列。

(4)执行主查询,完成批量更新操作。

3.使用游标:

游标是ORACLE中一种用于对查询结果集进行遍历的对象。使用游标进行批量更新的步骤如下: (1)创建一个游标,将包含要更新的数据的查询结果集绑定到游标上。

(2)使用游标进行遍历,逐行获取查询结果集中的数据。

(3)在遍历过程中,对每一行数据进行更新操作,并将更新后的数据写入目标表中。

(4)完成遍历后,关闭游标,完成批量更新操作。

4.使用PL/SQL块:

PL/SQL是ORACLE的一种过程化编程语言,可以在其中编写存储过程和函数等程序逻辑。使用PL/SQL块进行批量更新的步骤如下:

(1)创建一个包含批量更新逻辑的PL/SQL块。

(2)在PL/SQL块中编写循环语句,对目标表中的每一行数据进行更新操作。

(3)在循环语句中,获取要更新的数据并进行相应的处理。

(4)完成循环后,执行提交操作,将更新后的数据写入数据库中。

Merge into的使用详解-

Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key.

Oracle在9i引入了merge命令,

通过这个merge你能够在一个SQL语句中对一个表同时执行inserts和updates操作. 当然是update还是insert是依据于你的指定的条件判断的,Merge into可以实现用B表来更新A表数据,如果A表中没有,则把B表的数据插入A表. MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表

语法如下

MERGE INTO [your table-name] [rename your table here]

USING ( [write your query here] )[rename your query-sql and using just like a table]

ON ([conditional expression here] AND [...]...)

WHEN MATHED THEN [here you can execute some update sql or something else ]

WHEN NOT MATHED THEN [execute something else here ! ]

我们先看看一个简单的例子,来介绍一个merge into的用法

merge into products p using newproducts np on (p.product_id = np.product_id)

when matched then

update set p.product_name = np.product_name

when not matched then

insert values(np.product_id, np.product_name, np.category)

mybatis oracle merge into使用的例子

mybatis oracle merge into使用的例子

MyBatis是一种流行的Java持久层框架,可以方便地操作数据库。下面是一个使用MyBatis执行Oracle MERGE INTO操作的例子:

首先,创建两个表:一个源表(源表结构与目标表相同),一个目标表。

源表(source_table):

```sql

CREATE TABLE source_table (

id NUMBER PRIMARY KEY,

name VARCHAR2(50),

age NUMBER

);

```

插入一些示例数据:

```sql

INSERT INTO source_table (id, name, age) VALUES (1, 'Alice', 25); INSERT INTO source_table (id, name, age) VALUES (2, 'Bob', 30);

INSERT INTO source_table (id, name, age) VALUES (3, 'Charlie', 35);

COMMIT;

```

目标表(target_table):

```sql

CREATE TABLE target_table (

id NUMBER PRIMARY KEY,

name VARCHAR2(50),

age NUMBER

);

```

现在,我们使用MyBatis执行MERGE INTO操作,将源表的数据合并到目标表。创建一个对应的Mapper接口和映射文件:

Mapper接口:

```java

public interface SourceTargetMapper { int mergeIntoTargetTable(Map params);

}

```

映射文件(source_target_mapper.xml):

```xml

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档