我在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"
答案 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;