将平面文件中的数据提取到表中
Posted
技术标签:
【中文标题】将平面文件中的数据提取到表中【英文标题】:Extract data from flat file to a table 【发布时间】:2016-08-16 08:22:56 【问题描述】:我正在使用 Oracle 数据库 9i。 我想从平面文件(.txt)中提取数据,然后使用 sql_loader、utl_file、外部表、sqldeveloper、toad 将它们插入到表(在客户端)中。
平面文件源示例:
阿兰分析师 13456...
王经理98768 ...
【问题讨论】:
一个平面文件的例子会很有用。你的意思是你不想使用任何这些软件?你有什么可用的吗? 我编辑了我的帖子。我想使用 sql_loader、utl_file、外部表、sqldeveloper、toad 以外的其他解决方案。 您能否定义其他解决方案供我们指导。 任何其他不使用Oracle工具也不使用sql_loader、utl_file、外部表的解决方案。 为什么阻止您使用所有旨在解决此特定问题的工具?通常,当有人试图解决问题,确定旨在解决问题的工具,然后将这些工具排除在外时,需要大量背景故事来弄清楚可行的方法可能是什么样子。当然,您可以编写一个 Java/C#/Python/Perl/ 执行SQL*Loader
的任何脚本。但是,为了替换 Oracle 免费提供的标准工具,需要编写大量代码。
【参考方案1】:
这会从 file_name.csv 文件中提取数据并将其插入 EX_TABLE
create table EX_TABLE(
COL1 varchar2(13 BYTE)
,COL2 varchar2(250 CHAR)
,COL3 varchar2(210 CHAR)
,COL4 varchar2(70 CHAR)
)
organization external
(type oracle_loader
default directory EXT_DIR
access parameters
(
records delimited by newline
fields terminated by ','
missing field values are null
reject rows with all null
fields(COL1 CHAR(13)
,COL2 char(250)
,COL3 char(210)
,COL4 char(70)
)
)
location ('file_name.csv')
)
reject limit unlimited
;
【讨论】:
这假设字段是逗号分隔的?查看示例文件,没有分隔符,因此它必须是位置或其他。 是的,这个适用于 .csv 文件。下面我已经回答了简单的 .txt 文件。【参考方案2】: CREATE TABLE EX_TABLE
( COL1 varchar2(3 BYTE)
,COL2 varchar2(3 CHAR)
,COL3 varchar2(1 CHAR)
,COL4 varchar2(10 CHAR)
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY DAT_DIR
ACCESS PARAMETERS
( RECORDS DELIMITED BY \n
CHARACTERSET JA16SJISTILDE BADFILE BAD_DIR : 'test_%p_%a.bad' LOGFILE LOG_DIR : 'test_%p_%a.log' READSIZE 10485760 FIELDS LRTRIM MISSING FIELD VALUES ARE NULL REJECT ROWS
WITH ALL NULL FIELDS ( COL1 ( 1: 3) CHAR(3) ,COL2 ( 4: 6) CHAR(3) ,COL3 ( 7: 7) CHAR(1) COL4 ( 8: 17) CHAR(10) ))
LOCATION
( 'STS.txt'
)
)
REJECT LIMIT UNLIMITED;
根据文件中的位置将数据加载到外部表
【讨论】:
以上是关于将平面文件中的数据提取到表中的主要内容,如果未能解决你的问题,请参考以下文章