SQL 加载程序 - 多个文件和抓取文件名
SQL Loader - Multiple Files and Grabbing file names
我有一个包含超过 400K 个 txt 文件的文件夹。
名字像
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
我尝试使用以下方法创建控制文件:
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 个文件?
1) 创建 table 以保持 data/files
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
和源文件应该在同一个文件夹中。
我有一个包含超过 400K 个 txt 文件的文件夹。
名字像
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
我尝试使用以下方法创建控制文件:
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 个文件?
1) 创建 table 以保持 data/files
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
和源文件应该在同一个文件夹中。