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 ----------------------

需要满足以下条件

  • 从此文件加载数据(加载为EXCEL或CSV)

  • 加载数据时,创建多个批

  • 加载数据时,应用以下规则

    • (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
      删除前导(和尾随)空格

    您使用的是Oracle还是SQLite?是否必须使用SQL*Loader将CSV文件加载到Oracle数据库中?
    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>