【问题标题】:external table in oracle?oracle的外部表?
【发布时间】:2013-02-22 07:12:19
【问题描述】:

朋友们,我尝试使用oralce_loader 访问驱动程序将数据从平面文件加载到外部文件,我的代码是

create  table test_ext (
    id_1 varchar(35),
    emp_name varchar(25),
    e_mail varchar(25)) 
organization external (
    type oracle_loader default directory new_dir access parameters
        ( records delimited by newline fields(
             id_1 char(30),
             e_name char(25),
             mail char(25)))
    location('test.csv')) reject limit unlimited;

还有我的数据文件:

"E.FIRST_NAME||','||E.EMAIL||','||MANAGER_ID"
-----------------------------------------------
"Jennifer,JWHALEN,101"
"Michael,MHARTSTE,100"
"Susan,SMAVRIS,101"
"Hermann,HBAER,101"
"Shelley,SHIGGINS,101"
"William,WGIETZ,205"
"Steven,SKING,"
"Neena,NKOCHHAR,100"
"Lex,LDEHAAN,100"
"Alexander,AHUNOLD,102"
"Bruce,BERNST,103"
"David,DAUSTIN,103"
"Valli,VPATABAL,103"
"Diana,DLORENTZ,103"
"Nancy,NGREENBE,101"
"Daniel,DFAVIET,108"
"John,JCHEN,108"

在运行上面的查询时我得到了

**ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-04043: table column not found in external source: EMP_NAME
29913. 00000 -  "error in executing %s callout"
*Cause:    The execution of the specified callout caused an error.
*Action:   Examine the error messages take appropriate action.**

我尝试了很多东西,但我做不到。

【问题讨论】:

  • 检查您的输入!您正在使用名为:emp_name 的列创建表,但在您调用它的访问参数中:e_name
  • 是的,我认为这不是问题!

标签: sql oracle11g external-tables


【解决方案1】:

首先你的 csv 文件看起来不对。

"Alexander,AHUNOLD,102"

删除所有引号,否则它看起来像一个字段。

其次,您使用“字段”语法建议您需要固定长度的 csv 文件,但您的 dat 文件以逗号分隔。所以我认为你想修复你的 csv 以删除引号和两个虚假的标题行并将你的表 DDL 更改为:

create  table test_ext (
    id_1 varchar(35),
    emp_name varchar(25),
    e_mail varchar(25)) 
organization external (
    type oracle_loader default directory new_dir access parameters
        ( 
         records delimited by newline 
         fields terminated by ',' optionally enclosed by '"')
    location('test.csv')) reject limit unlimited;

例如:

SQL> host cat test.csv
Jennifer,JWHALEN,101
Michael,MHARTSTE,100
Susan,SMAVRIS,101
Hermann,HBAER,101
Shelley,SHIGGINS,101
William,WGIETZ,205
Steven,SKING,
Neena,NKOCHHAR,100
Lex,LDEHAAN,100
Alexander,AHUNOLD,102
Bruce,BERNST,103
David,DAUSTIN,103
Valli,VPATABAL,103
Diana,DLORENTZ,103
Nancy,NGREENBE,101
Daniel,DFAVIET,108
John,JCHEN,108
SQL> create  table test_ext (
  2      id_1 varchar(35),
  3      emp_name varchar(25),
  4      e_mail varchar(25))
  5  organization external (
  6      type oracle_loader default directory new_dir access parameters
  7          (
  8           records delimited by newline
  9           fields terminated by ',' optionally enclosed by '"')
 10      location('test.csv')) reject limit unlimited;

Table created.

SQL> select * from test_ext;

ID_1                                EMP_NAME                  E_MAIL
----------------------------------- ------------------------- -------------------------
Jennifer                            JWHALEN                   101
Michael                             MHARTSTE                  100
Susan                               SMAVRIS                   101
Hermann                             HBAER                     101
Shelley                             SHIGGINS                  101
William                             WGIETZ                    205
Neena                               NKOCHHAR                  100
Lex                                 LDEHAAN                   100
...etc...

【讨论】:

  • 你现在遇到的同样的问题...我如何消除所有记录中的 "!
  • @Thiyagu 你是如何生成 csv 的?看起来你在做一个选择字段||','||...from table?你能显示那个 sql
  • ya 这可以生成 csv:select e.first_name||','||e.email from employees e;但我通过使用 sql Developer 中的导出选项获得了该 csv
  • 啊,那是你的问题。当您导出它时,gui 会将其括在引号中。而是将其生成为单独的列(不要连接)并保存为 csv。每个文本列都可以用引号括起来..即你会看到 "Alexander","AHUNOLD",102 但这没关系,因为我的 ddl 中的 optionally enclosed by '"' 会处理这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多