【转载】oracle更新语法

发布时间:2017-7-9 7:18:21编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"【转载】oracle更新语法 ",主要涉及到【转载】oracle更新语法 方面的内容,对于【转载】oracle更新语法 感兴趣的同学可以参考一下。

【转载】oracle更新语法

oracle更新语法:
1.一般语法
   update tab set col = .... [where ...]   =后可以有子查询,但是必须对于tab的每一列返回唯一一行与之对应,where是需要更新的表,部分更新必须加,否则相关子查询的更新会把没有匹配的更新为null,如
  update tab a set a.col=(select b.col from b where a.id=b.id) where exists (select 1 from b where a.id=b.id) 类似地写了多遍

2.改进语法merge
  merge into tab
  using (表|视图|子查询等)  --子查询需要加括号  on (条件)
  when match then
   do update
  when no match then
  do insert                               

insert语法和update语法有所不同,详细参考文档,10g还支持update,insert的有条件更新和插入,支持update的delete where,支持只有update或insert的
不能修改using里的关联列,同样,必须每一行有唯一与之对应的

上面两种语法如果找不到唯一对应的,需要改进语句,比如加rownum=1

3.update inline view的用法
   update (select ...........关联查询) set 目标=源
  如 update(select a.name,b.name from a,b where a.id=b.id) set a.name=b.name;
      需要unique建保证唯一对应,比如上面的必须要b.id有唯一键,也就是preserved key,比如唯一索引什么的都可以,11g之前可以用hint: bypass_ujvc,这样不需要唯一键,但是可能有问题,一对多会更新多次,11g这个hint失效
  delete (select ....) 也可以,有很多要求,可以看sql文档,insert (select ...)限制更多
  第3种方法来源于可更新的视图


oracle更新基本有3种sql写法,后面两种往往优化中会使用到,特别第一种的更新关联子查询中源表不走索引,那么更新很多,相当于 nested loop,肯定慢,而且还有个where过滤,多次访问源表


上一篇:摩登家庭第一季/全集Modern Family迅雷下载
下一篇:腾讯云-搭建 Python 开发环境

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款