oracle存储过程--存量数据批量刷入
上周有新需求把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存储过程--存量数据批量刷入相关推荐
- excel实现套用模板批量打印_#数据清洗#Excel数据批量填入Word模板
问题描述:把Excel中数据批量填入Word模板中的特定位置 今天小伙伴,遇到一个问题,他有一份一千多个不同城市的客户资料,同时,有一份word文档,他需要把Excel中的数据一条条填写到word中对 ...
- C语言多个变量运算存储过程,postgresql函数中的赋值运算和postgresql函数存储过程实现数据批量插入...
今天检查大家写的postgresql函数时,发现有的家伙不遵守postgresql关于函数中的赋值运算表示方式: variable := value 注意的是,是:=表示赋值运算,而不是单独一个等号. ...
- oracle 存储过程插入数据不成功
oracle 存储过程插入数据不成功: 最大的一个原因是你定义的变量名和你表字段名相同!在定义的变量名前加个t_,问题就解决了!
- mysql如何植入到oracle_分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节...
1:MSSQL SQL语法篇: BULK INSERT [ database_name . [ schema_name ] . | schema_name . ] [ table_name | vie ...
- oracle存储过程之数据增删查改及调用
本文转载自:https://blog.csdn.net/u011955534/article/details/14647217 原文更易读,请参与原文. 存储过程: 存储过程是 SQL, PL/SQL ...
- linux 环境 crontab+shell+sqlplus 调用oracle 存储过程实现数据同步
需求背景:与第三方厂商合作使用sql_loadv1.0进行数据加载,他们负责推数,我拉数. 执行流程: 1.ODS推数-------->sftp服务器 2.拉数-------->sftp服 ...
- Magento 批量刷入 Amazon上的产品评论
网站上线前都需要弄点"假数据"让网站好看点,一般公司都是从AMAZON的店铺上把热销的产品review放到网站上,无奈AMAZON防爬虫的功夫一流(主要是我懒得再写爬虫有现成的为什 ...
- Oracle调用存储过程添加数据记录(包括唯一性判断)
继续我的文章之旅: 最近一直在Oracle打交道,当然我们也是一些调用采集并不涉及到内部机制.以前听老师说ICBC(爱存不存)后台数据整理,请了一洋鬼子Oracle专家,一小时上万刀!!!听了都让人心 ...
- 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fuchaosz/article/details/52473660 1 前言 经过一周的奋战,终于从谷 ...
最新文章
- python异常值删除_python删除有异常值
- CC2530学习路线-基础实验-串口通讯发送字符串(4 未完待续)
- LeetCode Increasing Triplet Subsequence(动态规划)
- 纠缠于沉没成本—— 你为什么应该忽视过去
- F1.4大光圈专业相机-海鸥CF100
- iBatis学习第一天
- leetcode 994. Rotting Oranges | 994. 腐烂的橘子(BFS)
- python需要安装的库_使用python学习【机器学习】需要安装的库~
- python自动发送邮件_Python自动发送邮件
- flex white-space: nowrap,撑大盒子问题
- typedef 定义函数指针
- 计算机与临床医学的应用,论临床医学教育中计算机系统的应用.pdf
- _wsplitpath_s
- 微信小程序使用 ocr 身份证识别
- mschart控件 用法
- Faster-RCNN.Pytorch的使用
- 数学建模美赛历年优秀论文(O奖)
- linux程序编译过程
- java 微信卡券开发 --创建微信卡券
- window7 右下角图标消失解决方法
热门文章
- 原创作品-Remix一键刷机工具
- Module build failed: Error: No PostCSS Config found
- Oracle时间格式化
- springboot-mybatis数据库字段和实体字段名称不一致,查询值为null
- ps学习一——婚纱设置
- Java实现求2的100次方
- linux mnt目录清理,linux下mnt目录作用详解
- 华为P30出现AndrOid,放大10倍看华为 P30,看完“真像”的你可能和我一样放弃 P30Pro...
- 单元格下拉全选快捷键_excel选择技巧:怎么样用快捷方式进行全选操作
- 2023年吉林建筑大学成人高考怎么报名