上周有新需求把face++识别的身份证信息存到会员中。存量数据还有1300万数据,也就是要刷1300万的数据。

想过跑批查询封装多线程调用dubbo接口,怕dubbo服务提供者扛不住。

考虑走脚本刷,一条脚本如下:

update mem.mem_base_info i
set i.nation = decode(i.nation,null,(select nationfrom risk.loan_identity_personinfo pwhere i.cust_id = p.mid),i.nation),i.police_station = decode(i.police_station,null,(select id_orgfrom risk.loan_identity_personinfo pwhere i.cust_id = p.mid),i.police_station),i.id_validity_date = decode(i.id_validity_date,null,(select case length(p.id_effect_date)when 21 thento_date(substrb(p.id_effect_date,12),'yyyy.mm.dd')elsenullendfrom risk.loan_identity_personinfo pwhere i.cust_id = p.mid),i.id_validity_date),i.id_address  = decode(i.id_address,null,(select id_addressfrom risk.loan_identity_personinfo pwhere i.cust_id = p.mid),i.id_address),i.update_time = sysdate
where i.cust_id = 3800000273511449;

找dba刷数据,dba说:“你这样的数据刷不了,执行太慢了。 ”,我说:“写个存储过程刷”,dba说“我不会这么玩!”,听完内心千万头羊驼飞奔而去,只好自己写存储过程,庆幸之前有一份存储过程的脚本,拿来借鉴。

存储过程v1版

create or replace procedure proc_update_meme_id_card_info is
i number;
begin
--初始值
i := 0;
--循环到结束
while i < 850 loop
--循环update 1天的数据
for x in (select mid,nation,
case length(p.id_effect_date)
when 21 then
to_date(substrb(p.id_effect_date, 12), 'yyyy.mm.dd')
when 17 then
to_date(substrb(p.id_effect_date, 10), 'yyyymmdd')
else null end as id_effect_date,
id_address, id_org from risk.loan_identity_personinfo p where trunc(p.update_time) = trunc(sysdate - i)) loopupdate mem.mem_base_info i
set i.nation = decode(i.nation, null, x.nation, i.nation),i.police_station = decode(i.police_station, null,x.id_org,i.police_station),i.id_validity_date = decode(i.id_validity_date, null, x.id_effect_date, i.id_validity_date),i.id_address  = decode(i.id_address, null, x.id_address, i.id_address),i.update_time = sysdate where i.cust_id = x.mid;
commit;
end loop;
Dbms_Output.put_line( ' i :  ' || i);
i := i + 1;
end loop;
end proc_update_meme_id_card_info;

执行发现时间的垃圾数据太多,正常的情况:2010.01.02-2020.01.02 或者  2010.01.02-长期 或者 20100102-20200102 结果数据库里面有  2010.01.02-20.2001.02 垃圾数据,要忽略处理,懵~~~

后来想想存储过程可以出现异常信息然后忽略的,出了v2版

create or replace procedure proc_update_meme_id_card_info is
i number;
begin
--初始值
i := 0;
--循环到结束
while i < 850 loop
--循环update 1天的数据
for x in (select mid,nation,
case length(p.id_effect_date)
when 21 then
to_date(substrb(p.id_effect_date, 12), 'yyyy.mm.dd')
when 17 then
to_date(substrb(p.id_effect_date, 10), 'yyyymmdd')
else null end as id_effect_date,
id_address, id_org from risk.loan_identity_personinfo p where trunc(p.update_time) = trunc(sysdate - i)) loopupdate mem.mem_base_info i
set i.nation = decode(i.nation, null, x.nation, i.nation),i.police_station = decode(i.police_station, null,x.id_org,i.police_station),i.id_validity_date = decode(i.id_validity_date, null, x.id_effect_date, i.id_validity_date),i.id_address  = decode(i.id_address, null, x.id_address, i.id_address),i.update_time = sysdate where i.cust_id = x.mid;
commit;
end loop;
Dbms_Output.put_line( ' i :  ' || i);
i := i + 1;
end loop;
end proc_update_meme_id_card_info;

编译成功!大功告成

执行存储过程

begin
-- Call the procedure
proc_update_meme_id_card_info;
end;

存储过程写法:

  CREATE OR REPLACE PROCEDURE 存储过程名(param1 in type,param2 out type)

  IS

  变量1 类型(值范围);

  变量2 类型(值范围);  

  BEGIN

    select count(*) into 变量1 from 表名 where 列名=param1;

    if (判断条件) then

      select 列名 into 变量2 from 表名 where 列名=param1;

      DBMS_OUTPUT.put_line('打印信息');

    Elsif (判断条件) then

      dbms_output.put_line('打印信息');

    Else

      Raise 异常名 (NO_DATA_FOUND);

    End if;

  Exception

      When others then

        Rollback;   

  END;

oracle存储过程--存量数据批量刷入相关推荐

  1. excel实现套用模板批量打印_#数据清洗#Excel数据批量填入Word模板

    问题描述:把Excel中数据批量填入Word模板中的特定位置 今天小伙伴,遇到一个问题,他有一份一千多个不同城市的客户资料,同时,有一份word文档,他需要把Excel中的数据一条条填写到word中对 ...

  2. C语言多个变量运算存储过程,postgresql函数中的赋值运算和postgresql函数存储过程实现数据批量插入...

    今天检查大家写的postgresql函数时,发现有的家伙不遵守postgresql关于函数中的赋值运算表示方式: variable := value 注意的是,是:=表示赋值运算,而不是单独一个等号. ...

  3. oracle 存储过程插入数据不成功

    oracle 存储过程插入数据不成功: 最大的一个原因是你定义的变量名和你表字段名相同!在定义的变量名前加个t_,问题就解决了!

  4. mysql如何植入到oracle_分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节...

    1:MSSQL SQL语法篇: BULK INSERT [ database_name . [ schema_name ] . | schema_name . ] [ table_name | vie ...

  5. oracle存储过程之数据增删查改及调用

    本文转载自:https://blog.csdn.net/u011955534/article/details/14647217 原文更易读,请参与原文. 存储过程: 存储过程是 SQL, PL/SQL ...

  6. linux 环境 crontab+shell+sqlplus 调用oracle 存储过程实现数据同步

    需求背景:与第三方厂商合作使用sql_loadv1.0进行数据加载,他们负责推数,我拉数. 执行流程: 1.ODS推数-------->sftp服务器 2.拉数-------->sftp服 ...

  7. Magento 批量刷入 Amazon上的产品评论

    网站上线前都需要弄点"假数据"让网站好看点,一般公司都是从AMAZON的店铺上把热销的产品review放到网站上,无奈AMAZON防爬虫的功夫一流(主要是我懒得再写爬虫有现成的为什 ...

  8. Oracle调用存储过程添加数据记录(包括唯一性判断)

    继续我的文章之旅: 最近一直在Oracle打交道,当然我们也是一些调用采集并不涉及到内部机制.以前听老师说ICBC(爱存不存)后台数据整理,请了一洋鬼子Oracle专家,一小时上万刀!!!听了都让人心 ...

  9. 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fuchaosz/article/details/52473660 1 前言 经过一周的奋战,终于从谷 ...

最新文章

  1. python异常值删除_python删除有异常值
  2. CC2530学习路线-基础实验-串口通讯发送字符串(4 未完待续)
  3. LeetCode Increasing Triplet Subsequence(动态规划)
  4. 纠缠于沉没成本—— 你为什么应该忽视过去
  5. F1.4大光圈专业相机-海鸥CF100
  6. iBatis学习第一天
  7. leetcode 994. Rotting Oranges | 994. 腐烂的橘子(BFS)
  8. python需要安装的库_使用python学习【机器学习】需要安装的库~
  9. python自动发送邮件_Python自动发送邮件
  10. flex white-space: nowrap,撑大盒子问题
  11. typedef 定义函数指针
  12. 计算机与临床医学的应用,论临床医学教育中计算机系统的应用.pdf
  13. _wsplitpath_s
  14. 微信小程序使用 ocr 身份证识别
  15. mschart控件 用法
  16. Faster-RCNN.Pytorch的使用
  17. 数学建模美赛历年优秀论文(O奖)
  18. linux程序编译过程
  19. java 微信卡券开发 --创建微信卡券
  20. window7 右下角图标消失解决方法

热门文章

  1. 原创作品-Remix一键刷机工具
  2. Module build failed: Error: No PostCSS Config found
  3. Oracle时间格式化
  4. springboot-mybatis数据库字段和实体字段名称不一致,查询值为null
  5. ps学习一——婚纱设置
  6. Java实现求2的100次方
  7. linux mnt目录清理,linux下mnt目录作用详解
  8. 华为P30出现AndrOid,放大10倍看华为 P30,看完“真像”的你可能和我一样放弃 P30Pro...
  9. 单元格下拉全选快捷键_excel选择技巧:怎么样用快捷方式进行全选操作
  10. 2023年吉林建筑大学成人高考怎么报名