1

嗨朋友我试图使用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.**

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

4

1 回答 1

3

首先你的 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...
于 2013-02-22T08:13:29.720 回答