oracle中更新关键字merge和 with as关键字

不念不忘少年蓝@ 2021-10-01 02:46 653阅读 0赞

merge是oracle特有的语句,两表关联操作(增、删、改)就效率非常高

  1. merge into table_name alias1
  2. using (table|view|sub_query) alias2
  3. on (join condition)
  4. when matched then
  5. update table_name
  6. set col1 = col_val1,
  7. col2 = col2_val
  8. when not matched then insert ( column_list ) values (
  9. column_values
  10. );

它的原理是在alias2中Select出来的数据,每一条都跟alias1进行 ON (join condition)的比较,如果匹配,就进行更新的操作(Update),如果不匹配,就进行插入操作(Insert)。执行merge不会返回影响的行数。Merge语句的写法比较繁琐,并且最多只能两个表关联,复杂的语句用merge更新法将力不从心且效率差。

也可以使用快速游标更新法

  1. begin
  2. for cr in (查询语句) loop –-循环
  3. --更新语句(根据查询出来的结果集合)
  4. endloop; --结束循环
  5. end;

oracle支持快速游标,不需要定义直接把游标写到for循环中,这样就方便了我们批量更新数据。再加上oracle的rowid物理字段(oracle默认给每个表都有rowid这个字段,并且是唯一索引),可以快速定位到要更新的记录上。

with as

  1. with
  2. cr as
  3. (
  4. select CountryRegionCode from person.CountryRegion where Name like 'C%'
  5. )
  6. select * from person.CountryRegion -- 应将这条SQL语句去掉
  7. -- 使用CTESQL语句应紧跟在相关的CTE后面 --
  8. select * from person.StateProvince where CountryRegionCode in (select * from cr)

这里可以将cr看做是一个视图名。十分方便平时在工作中进行操作。

转载于:https://www.cnblogs.com/dqcer/p/9804126.html

发表评论

表情:
评论列表 (有 0 条评论,653人围观)

还没有评论,来说两句吧...

相关阅读