Sql 从该文件加载数据。(以EXCEL或CSV格式加载)
需要满足以下条件Sql 从该文件加载数据。(以EXCEL或CSV格式加载),sql,oracle,sql-loader,regexp-replace,Sql,Oracle,Sql Loader,Regexp Replace,需要满足以下条件 从此文件加载数据(加载为EXCEL或CSV) 加载数据时,创建多个批 加载数据时,应用以下规则 (a) 删除“名称”列中的多余空格,并替换为单个空格 (b) 如果名字和姓氏之间没有空格,请添加空格 (c) 在名称中,删除任何特殊字符 (d) 在名称中,更改为标题大小写 在EmpID上删除所有特殊字符,EmpID应为EMP0011格式 我的控制权在下面 EmpId Name ----------------------
- (a) 删除“名称”列中的多余空格,并替换为单个空格
- (b) 如果名字和姓氏之间没有空格,请添加空格
- (c) 在名称中,删除任何特殊字符
- (d) 在名称中,更改为标题大小写
- 在EmpID上删除所有特殊字符,EmpID应为EMP0011格式
EmpId Name
----------------------
E0008 Mary _Jane
EMP0009 PeterParker
10 Jack roger
EMP 0012 Mark Todd
EMP0011 John Smith
EMP13 *Peter Parker
我无法满足条件2、3b、3d,请看下面的示例 控制文件:
load data
infile 'E:\A\Book2.csv'
TRUNCATE
PRESERVE BLANKS
into table dummy
fields terminated by ','
optionally enclosed by '"'AND'"'
(
EMPID "CASE WHEN SUBSTR(:EMPID,1,1)='E' THEN 'EMP00'||SUBSTR(:EMPID,-2) ELSE
'EMP00'||SUBSTR(:EMPID,-2) END",
NAME "INITCAP(REGEXP_REPLACE(:NAME,'[^A-Z a-z]'))"
)
加载会话和结果:
load data
infile *
replace
into table dummy
fields terminated by ";"
trailing nullcols
(
empid "'EMP' || lpad(regexp_substr(:empid, '[[:digit:]]+$'), 4, '0')",
name "trim(initcap(regexp_replace(regexp_replace(regexp_replace(:name, '[^[:alnum:] ]'), '([[:upper:]])', ' \\1'), ' +', ' ')))"
)
begindata
E0008;Mary _Jane
EMP0009;PeterParker
10;Jack roger
EMP 0012;Mark Todd
EMP0011;John Smith
EMP13;*Peter Parker
控制文件的作用是什么
对于EMPID
:由于它必须以EMP
开头,因此设置为常量。输入数据中的数字用长度不超过4个字符的零填充
对于名称
:
- 最里面的regexp
除去字母数字和空格以外的任何内容[^[:alnum:]
- 向上一级regexp
在每个大写字母前面添加空格”([[:upper:]]),“\\1”
- 一个更高级的regexp
将多个空格替换为一个空格“+”,“
将每个单词的首字母大写INITCAP
删除前导(和尾随)空格TRIM
SQL> $sqlldr scott/tiger@kc11gt control=test32.ctl log=test32.log
SQL*Loader: Release 11.2.0.1.0 - Production on Uto Ruj 1 10:18:01 2020
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 5
Commit point reached - logical record count 6
SQL> select * from dummy;
EMPID NAME
---------- --------------------
EMP0008 Mary Jane
EMP0009 Peter Parker
EMP0010 Jack Roger
EMP0012 Mark Todd
EMP0011 John Smith
EMP0013 Peter Parker
6 rows selected.
SQL>