数据库

 首页 > 数据库 > Oracle > oracle中MERGE语句和多表关联的update简析

oracle中MERGE语句和多表关联的update简析

分享到:
【字体:
导读:
         摘要:MERGE是用来一次操作实现INSERT,UPDATE,DELETE的复合语句。语法:MERGEINTOTABLE/VIEWUSING(TABLE/VIEW/SUBQUERY)ON(condition)[WHENMETCHEDTHENUPDATESETCOLUMNexpr/DEFAULT[WHEREc... ...

oracle中MERGE语句和多表关联的update简析

MERGE是用来一次操作实现INSERT,UPDATE,DELETE的复合语句。
 
语法:
MERGE INTO TABLE/VIEW USING (TABLE/VIEW/SUBQUERY) ON (condition)
[WHEN METCHED THEN UPDATE SET COLUMN=expr/DEFAULT [WHERE condition]
     www.2cto.com       [DELETE  WHERE condition]]
[WHEN NOT MATCHED THEN INSERT [(column,...)] VALUES(v,...) [WHERE condition]]
[LOG ERRORS [ INTO TABLE (...)] [REJECT LIMIT num/UNLIMITED]]
 
说明:
1、更新视图时不能使用DEFAULT值。
2、不能更新ON中的关联字段。
例子:
1
MERGE INTO bonuses D
2
   USING (SELECT employee_id, salary, department_id FROM employees
3
   WHERE department_id = 80) S
4   www.2cto.com  
   ON (D.employee_id = S.employee_id)
5
   WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
6
     DELETE WHERE (S.salary > 8000)
7
   WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
8
     VALUES (S.employee_id, S.salary*0.1)
9
     WHERE (S.salary <= 8000);
在update语句中,通常只能update一张表,对于多表关联更新,update语句限制关联字段必须有惟一索引。
例如:
1
update (select a.city_name,b.city_name as new_name
2
from customers a,
3
tmp_cust_city b
4  www.2cto.com  
where b.customer_id=a.customer_id
5
)
6
set city_name=new_name
现在,可以使用merge来实现这个功能:
 
1
MERGE INTO a USING b  ON (b.customer_id=a.customer_id )
2
   WHEN MATCHED THEN UPDATE SET a.city_name=b.city_name
 
 
 
作者 hulubo
oracle中MERGE语句和多表关联的update简析
分享到:
oracle数据库查询及创建索引
oracle数据库查询及创建索引 oracle数据库查询及创建索引   系统中有一张记录登录和注销的日志表,时间长了之后,数据量很大,又没有历史表。 而客户端登录时都会去数据库查询用户上次登录的IP和时间,由于没有索引所以很慢有时侯。 故需要对此表加入索引,一提高查询效率   首先先查下表中存在哪些索引 Sql代码   ...
Oracle数据字典之dba_视图
Oracle数据字典之dba_视图 DBA_ 视图返回有关数据库中所有对象的信息,而无需考虑对象的所有者。只有数据库管理员才可访问此视图。例如,对 DBA_TABLES 的查询将返回数据库中所有关系表的列表。   有时候数据库管理员可授予开发人员访问 DBA 视图的权限。同义词并不是为这些视图而创建的,因为只有管理员才可查询 DBA 视...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……