oracle中你不常用的update句子ITeye - 亚美娱乐

oracle中你不常用的update句子ITeye

2019-01-12 14:06:34 | 作者: 凝丹 | 标签: 更新,这儿,表是 | 浏览: 2744

这儿要点介绍根据别的的表更新当时表的操作。

比方你有一张user表,是参阅user_ref得来的,换句话说,你user表的用户都来自user_ref,可是半途呈现一些问题,user表中的有些user的first_name, last_name不对,现在要求用user_ref的相对应的name来更新user表:

首要,对user表做个copy,断定数据没错后再对真实的user表操作

 

create table myuser as select * from rp_user;

 

计划一:

 

咱们能够这么写

 

update myuser
set(first_name, last_name) =
(
  select rpref.first_name first_name, rpref.last_name last_name
  from rp_ref_employee rpref
  where rpref.soe_id(+) = myuser.sso_id
  and rpref.soe_id is not null
)
where exists
(
  select 1 from rp_ref_employee rpref where rpref.soe_id(+) = myuser.sso_id and rpref.soe_id is not null
);

 

请你特别留意这儿的where子句,假如你不写,oracle将默许更新一切的值,假如某些值在子查询中找不到,将会使得myuser中呈现许多空值;

 

计划二:

 

update
(
  select myuser.first_name myfn, rpref.first_name rpfn, myuser.last_name myln, rpref.last_name rpln
  from myuser, rp_ref_employee rpref
  where rpref.soe_id(+) = myuser.sso_id
  and rpref.soe_id is not null
)
set myfn = rpfn, myln = rpln;

 

这儿的表是一个类视图,你履行的时分可能会遇到这样的过错,‘无法修正与非键值保存表对应的列’,这是由于新建表还没有主键 的原因,新建主键;

 

 

summary:

 

在oracle中不存在update from结构,假如遇到需要从别的一个表来更新本表值的时分,有2种计划,一种是运用子查询,此刻必定要留意where 条件(一般后边接exists),除非两个表是一一对应的,不然where条件不行少;

还有就是类视图的更新办法,这也是oracle所独有的!

 

reference:

 

                

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表亚美娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章