批量更新/导入数据

--0、导出数据    将数据导出为excel,再复制到UE中,保存为txt格式
 select  '"' ||ECIF_CUST_NO|| '",'||'"' ||replace (name,' ','') || '",'||'"' ||CERT_TYPE|| '",'||'"' ||CERT_NO || '"' as A
 from t_usr_reg_info where USER_CERT_LEVEL = '05' and ECIF_CUST_NO is  null ;
--1、创建临时表
create table t_usr_reg_info_temp
(
  ECIF_CUST_NO         VARCHAR2(14),
  NAME                 VARCHAR2(120),
  CERT_TYPE            CHAR(1),
  CERT_NO              VARCHAR2(30)
)
--2、cmd 往临时表中灌入数据
sqlldr ebbc/ebbc@EBBC_10.16.10.54 control=e:\t_usr_mobile_reserveinfo.ctl log=e:\t_usr_mobile_reserveinfo.log errors=1000000  rows=10000 bindsize=5120000 readsize=5120000

其中,ebbcusr_x/ebbcusr_x@uatb_ebbcusr 指的是用户名和密码和数据库路径、control=f:\ecif\t_usr_mobile_reserveinfo.ctl 指的是ctl脚本文件的存放路径、log=f:\ecif\t_usr_mobile_reserveinfo.log 指的是日志的存放路径、errors=1000000执行时报错的条数,超过了就会打断不会继续往下走了,但是执行的了,就会事物提交、 rows=10000
每次提交事物的条数、其中,具体见t_usr_mobile_reserveinfo.ctl,里面会筛选出没有成功的数据

--其中,t_usr_mobile_reserveinfo.ctl文件具体内容
LOAD DATA
CHARACTERSET UTF8  --编码格式
INFILE 'E:\ecif_cust_no_bak.txt'  --导出的数据,按"20380000299000","文学蓉","0","510624196304284868"格式添加到临时表中
BADFILE 'E:\ecif_cust_no_bak.bad' --执行失败的数据
APPEND
INTO TABLE t_usr_reg_info_temp
FIELDS TERMINATED BY ","  --按逗号分隔
OPTIONALLY ENCLOSED BY '"' --去除双引号
TRAILING NULLCOLS
(
ECIF_CUST_NO ,
Name ,
CERT_TYPE ,
CERT_NO
)
--3、验证数据
select * from t_usr_reg_info_temp
--4、更新数据
update t_usr_reg_info a set a.ecif_cust_no=(select b.ecif_cust_no from t_usr_reg_info_temp  b where a.cert_no=b.cert_no and  a.cert_type=b.cert_type)
   where (cert_no,cert_type) in (
      select cert_no,cert_type from t_usr_reg_info_temp 

   );

猜你喜欢

转载自sophyly.iteye.com/blog/2270682