将平面文件中的数据提取到表中

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;

根据文件中的位置将数据加载到外部表

【讨论】:

以上是关于将平面文件中的数据提取到表中的主要内容,如果未能解决你的问题,请参考以下文章

如何重新配置​​平面文件连接管理器上的列信息?

我必须从 xml 文件中提取数据并将其插入到表中

函数作为反应孩子无效? - 需要帮助将提取的数据提取到表中

将数据从(设计时未知)SQLite db 动态显示到表视图

ODBC 连接到平面文件

oracle 将文本文件中的数据加载到表中