问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在oracle中,我想更新数据,但是满足条件的有多条数据,用update怎么逐条更新呢,在线等

发布网友 发布时间:2022-04-08 09:30

我来回答

3个回答

懂视网 时间:2022-04-08 13:51

说明:笔记总结了在工作中遇到过的几种update方法和各种方法适用的范围。

1.单表更新
方案:使用标准update语法即可,执行稳定且效率较高
update table
set (column1,column2,...)=
value1,value2,...
;

2.多表关联更新
举例:更新gkfq_rec表中所有slid与oa2_ftask表fi_inst相同的行,blzt字段值=oa2_ftask表的ft_lstate。

create table gkfq_rec (

slid char(12) parimary key,

blzt varchar2(50),

wjbt varchar2(100) not null,

........

);

create table oa2_ftask (

fi_inst char(12) parimary key,

fi_state int not null,

ft_lstate int not null,

...

);

 

 方法描述

 适用范围

 运行效率

 传统方案  一般情况适用  单表更新效率高且稳定,多表时效率较慢
 inline view更新法  关联字段为主键  速度较快
 merge更新法  关联字段非主键,适用于两表关联  非主键关联表更新,速度较快
 快速游标更新法  逻辑较复杂的情况  复杂逻辑时效率很高

 

(1)传统方案(速度可能最慢)
update gkfq_rec a 
set blzt=
(select b.ft_lstate from oa2_ftask b where a.slid=b.fi_inst)
where exists
(select 1 from oa2_ftask b where a.slid=b.fi_inst)
;

//子查询返回多行值时,通过where exists条件逐行过滤,一一匹配实现set唯一值

(2)inline view更新法(关联主键字段,速度较快)
方案:更新一个临时建立的视图。要求B表的主键字段必须在where条件中,并且是以=号来关联被更新表,否则可能报错:ORA-01779:无法修改与非键值保存表对应的列。当B表主键字段为多列组合时,也有可能出现这一报错。update (select a.blzt as blzt,b.ft_lstate as ft_lstate
from gkfq_rec a,oa2_ftask b where a.slid=b.fi_inst) 
set blzt=ft_lstate
;

(3)merge更新法(关联字段非主键时,速度较快)
语法:
MERGE INTO table_name alias 1
USING (table|view|sub_query) alias 2
ON (join condition)
WHEN MATCHED THEN
UPDATE 
SET col1=col_val1,
    col2=col_val2
WHEN NOT MATCHED THEN
INSERT (column_list) VALUES (column_values);

方案:在alias2中select出来的数据,每一条都跟alias1进行ON (join condition)比较,若匹配,就进行更新操作,不匹配,执行插入操作。merge不会返回影响行数,且最多只能两表关联,适用于连接条件不是主键的字段。
merge into gkfq_rec a
using oa2_ftask b
on (a.slid=b.fi_inst)
when matched then
update set a.blzt=b.ft_lstate;

(4)快速游标更新法(复杂逻辑时,效率很高)
语法:
begin
for cr in (查询语句) loop  --循环
update table_name set ...   --更新语句(根据查询出来的结果集合)
end loop;  --结束循环
end;

方案:配合oracle独有的内置ROWID物理字段,使用快速游标,不需要定义,直接把游标写到for循环中,快速定位并执行更新。它可以支持复杂逻辑的查询语句,更新准确,无论数据多大更新效率依然很高。但执行后不返回影响行数。
begin
for aa in (select a.rowid as rowid,b.ft_lstate as ft_lstate from gkfq_rec a,oa2_ftask b
where a.slid=b.fi_inst ) loop
update gkfq_rec set blzt=aa.ft_lstate
where rowid=aa.rowid;
end loop;
end;

update更新多行数据(oracle)

标签:

热心网友 时间:2022-04-08 10:59

update主要由where条件决定更新对象,不写where条件会更新全表。

update table set column1 = 'a' where column1 = '1';
这条语句就是把所有column1列值为'1'的行的column1列都更新成'a'

热心网友 时间:2022-04-08 12:17

写一个 while 循环,一条一条更新,可以吗?

while 
begin
 *****
end

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
求这图片原图或者主角 出自哪一边电影或者电视剧 哪位大神知道这张图原版在吗?求原版。。。 在word中加下划线时第一次出现一条下划线第二次怎么就出现两条... 诛仙2资料站里的宠物展示能在npc买到吗 求一些诛仙2中的可以变为人形的宠物名字 诛仙2 神域的神农殿里,这是什么东西 诛仙2宠物元神问题 诛仙2 商城 中 宠物元神 怎么比 宠物 还贵啊?宠物元神是干什么的啊... 电热水器怎么安固定花洒 猛鬼夜惊魂剧情介绍 安川旳变频器怎么样啊?项城市有做得用的住的么? 电气工程及其自动化除了进电力系统,电厂等国家控制的单位,还能进什么样的企业? plc电梯变频调速中的变频器是外接控制还是编程控制? 买了一套商品混凝土搅拌站其他的都安装就绪,就是螺旋输送机和水泥仓安装不到位谁知道? 250KW变频电动机最少要佩多大的线? 温州有哪些变频器生产厂家? 戈,舌,爪,无,工,台加一个偏旁部首,使它们组成新字 加一个偏旁使这些字组成新字 莫.马.吴.堂 加一个字,使它和以下偏旁(鸟、月、火)都能组成一个新字。 加一个字,使它和以下偏旁(鸟、瓦、殳、欠、目、才、三点水、竖心旁、言字旁、口)都能组成一个新字 力犬丁里加什么偏旁才能使这四个字组成新字 加一个偏旁使成为四个新字 假字换一个偏旁,使它组成一个新字,再组词 填一个偏旁 使一、口、又、办、都能组成新字 还有 加一个偏旁使刀 力 巾 勿 都组成新字 给下列字加偏旁,使其组成新的字。 使字换个偏旁 使字可以换什么偏旁 使还可以换什么偏旁组成新字 使换一个偏旁能组成什么字 “使”字换偏旁组字词 糯米绿豆汤怎么做如何做好吃 【BOSS交流】哎我还是不能区分怎么才是差PP怎么才是插鲍... 岳阳糯米煮绿豆的做法大全 绿豆糯米饭怎么做 绿豆糯米甜甜怎么做 绿豆糯米羹是怎样制作的? 绿豆和糯米怎么做好吃 绿豆汤(加糯米版)怎么做 绿豆糯米粥怎么做 绿豆沙糯米糍的做法,绿豆沙糯米糍怎么做好吃,绿豆沙 糯米绿豆粥的做法 绿豆可不可以和糯米一起煮,要怎么做。 绿豆糯米粑粑怎么做? 加过红豆和糯米的绿豆汤怎么煮? iphone手机屏碎了在沈阳要到哪里去修?多少钱? 手机外屏就是玻璃碎了换要多少钱 沈阳小北手机市场小米2s屏幕更换多少钱 三星手机换个屏幕大概需要多少钱呢? 旧手机显示屏摔坏了,有修的必要吗? 换手机液晶屏幕多少钱?