oracle外部表加载

时间:2015-03-31 17:13:35

标签: sql oracle data-warehouse

我在players.dat文件中有100条记录,如

 PIT   INDIANPOLISH  COLTS

然后新线再次相同。如何将此数据加载到外部表中?

这是我的表定义:

CREATE TABLE TEAMS1( 
    TEAM_ID VARCHAR2(20) 
    , TEAM_NAME VARCHAR2(35)
    ) 
ORGANIZATION EXTERNAL ( 
    TYPE ORACLE_LOADER 
    DEFAULT DIRECTORY DATA_WAREHOUSE
    ACCESS PARAMETERS ( 
        RECORDS DELIMITED BY newline 
        fields terminated by whitespace 
        missing fields values are null ( 
            TEAM_ID VARCHAR(20),
            TEAM_NAME VARCHAR2(35) 
            TERMINATED BY '/N')
            ) 
    LOCATION ('NFL_Teams.dat')
) ;

这是错误:

ORA-29913: error in executing ODCIEXTTABLEOPEN callout 
ORA-29400: data cartridge error 
KUP-00554: error encountered while parsing access parameters 
KUP-01005: syntax error: found "fields": expecting one of: "field" 
KUP-01007: at line 3 column 9 29913. 00000 - "error in executing %s callout"

2 个答案:

答案 0 :(得分:1)

错误消息指出语法问题,它甚至给我们一个线索。

KUP-01005: syntax error: found "fields": expecting one of: "field" 

果然,你的表定义有这个......

missing fields values are null 

......应该是这样的:

missing field values are null 

您的数据文件存在严重问题。您的表定义指定fields terminated by whitespace但您的示例数据显示的团队名称由两个单词INDIANPOLISH COLTS组成。你将无法加载它。

最佳解决方案是让提供系统做正确的事情,并提供使用合理的字段分隔符和/或现场外壳的数据文件。 (如果这是学校作业,你可以自己做。)

一个不太理想的解决方案是预处理数据文件,使用正则表达式来分隔或包含字段。

答案 1 :(得分:0)

您的代码存在多个问题,您可以尝试根据此更正:

 CREATE TABLE TEAMS1( TEAM_CODE varchar2(10), TEAM_ID VARCHAR2(20) , TEAM_NAME VARCHAR2(35)) ORGANIZATION EXTERNAL 
( TYPE ORACLE_LOADER DEFAULT DIRECTORY DATA_WAREHOUSE ACCESS PARAMETERS 
( RECORDS DELIMITED BY newline  fields ( TEAM_CODE varchar(10), TEAM_ID VARCHAR(20), 
TEAM_NAME VARCHAR(35) )) LOCATION ('players.dat')) ; 

然后你可以创建标准表让我们说TEAMS(team_id varchar2(20),team_name varchar2(35))并从外部表加载它:

 insert into teams select team_id, team_name from teams1;