SQL Loader - 多个文件和抓取文件名

问题描述 投票:1回答:1

我有一个包含超过400K文本文件的文件夹。

名字就像

deID.RESUL_12433287659.txt_234323456.txt
deID.RESUL_34534563649.txt_345353567.txt
deID.RESUL_44235345636.txt_537967875.txt
deID.RESUL_35234663456.txt_423452545.txt

我想以下列方式存储所有文件及其内容:

file_name                                      file_content
deID.RESUL_12433287659.txt_234323456.txt       Content 1
deID.RESUL_34534563649.txt_345353567.txt       Content 2
deID.RESUL_44235345636.txt_537967875.txt       Content 3
deID.RESUL_35234663456.txt_423452545.txt       Content 4

我试着用以下方法创建Control文件:

LOAD
  DATA 
  INFILE 'deID.RESUL_12433287659.txt_234323456.txt'
  INFILE 'deID.RESUL_34534563649.txt_345353567.txt'
  INFILE 'deID.RESUL_44235345636.txt_537967875.txt'
  INFILE 'deID.RESUL_35234663456.txt_423452545.txt'
  APPEND INTO TABLE TBL_DATA
    EVALUATE CHECK_CONSTRAINTS
    REENABLE DISABLED_CONSTRAINTS
    EXCEPTIONS EXCEPTION_TABLE
  FIELDS TERMINATED BY "" 
  OPTIONALLY ENCLOSED BY '"'
  TRAILING NULLCOLS
  ( 
    FILE_NAME
  )

有没有办法可以动态获取文件名并在INFILE中指定通配符,所以我不必在控制文件中逐一提及400K文件?

oracle sql-loader
1个回答
1
投票

1)创建表以保存数据/文件

create table TBL_DATA(file_name varchar2(4000), file_content clob);

2)创建load_all.ctl

LOAD DATA
INFILE file_list.txt
INSERT INTO TABLE TBL_DATA
APPEND
FIELDS TERMINATED BY ","
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
    file_name          char(4000)
  , file_content                   LOBFILE(file_name) TERMINATED BY EOF
)

3)将文件列表重定向到一个file_list.txt ls -1 *.txt > file_list.txt

4)运行sqlldr user/pass@db control=load_all.ctl 5)load_all.ctl,file_list.txt和源文件应该在同一个文件夹中。

© www.soinside.com 2019 - 2024. All rights reserved.