Oracle 中使用游标批量刷新数据

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(字段名,'被替换的字符','替换的字符')
  • 作用:
    • 常用于查询结果和条件判定的字符替换
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    100 引用 • 124 回帖 • 607 关注
1 回帖
请输入回帖内容...