Oracle 中两个表批量更新数据
场景:
客户给了 1W 多条数据(excel),需要批量进行数据库更新。
主表 A 条件匹配字段:name,mobile
主表 A 更新字段:certificatenum
创建临时表 B 与这三个字段匹配并导入数据
DML(Data Manipuation Language)数据库操纵语言(insert,update,delete)
update from A
set A.certificatenum =
(select B.certificatenum
from B
where B.name= A.name
and B.mobile = A.mobile)
where exists (select 1
from B
where B.name= A.name
and B.mobile = A.mobil)
Oracle 中 exists 关键字的使用
- 语法:
- exists subquery
- subquery 一个受限的子查询
- 返回结果:查询包含行,则返回 True,否则返回 false
笔者无法成功执行语句,因为判定条件没有唯一标识 id,phone 和 mobile 在临时表 B 中有重复记录,会报查询结果返回多行的错误。
隐式游标(cursor)
这里使用的是快速游标法:
begin
for upt_certificatenum in (select B.name,B.mobile,B.certificatenum from A,B)
loop
update A
set A.certificatenum = upt_certificatenum.certificatenum
where A.name = replace(upt_certificatenum.name,' ','')
and A.mobile = upt_certificatenum.mobile;
end loop;
end;
Oracle 中隐式 cursor 的用法(常见的 select,update,insert,delete 操作)
- 概念:游标是 SQL 的一个内存工作区,由系统或用户以变量的形式定义。
- 属性(通过属性查看操作状态与结果,并进行控制):
- SQL%ROWCOUNT 整型,DML 语句成功执行的行数
- SQL%FOUND 布尔型,返回 True 或 False
- SQL%NOTFOUND 布尔型,返回 True 或 False
- SQL%ISOPEN 布尔型,返回 True 或 False
- 隐式游标自动 OPEN 和 CLOSE
- 作用:
- 用于临时存储从数据库中提取的数据库。
- 在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。
- 数据处理的速度会提高,否则频繁的磁盘数据交换会降低效率。
Oracle 中系统函数 Replace 的用法
- 语法:
- replace(字段名,'被替换的字符','替换的字符')
- 作用:
- 常用于查询结果和条件判定的字符替换
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于