Oracle外部表使用FILLER关键字触发KUP报错问题求助
Oracle外部表使用FILLER关键字报错的原因及解决方法
问题重现
创建外部表时尝试用FILLER跳过不需要的字段,执行查询时报错,改用char类型占位则正常运行。创建语句如下:
create table etbl (EMPLOYEE_ID number, EMAIL varchar2(200), SALARY number) organization external ( type oracle_loader default DIRECTORY dir1 access parameters ( records delimited by NEWLINE skip 1 logfile 'log.txt' badfile 'emp.bad' fields terminated by ',' optionally ENCLOSED by '"' MISSING field values are null ( EMPLOYEE_ID char(200), FIRST_NAME FILLER, FILLER char(200), EMAIL char(200), FILLER char(200), FILLER char(200), FILLER char(200), SALARY char(200), FILLER char(200), FILLER char(200), FILLER char(200) ) ) location ('emp.txt') ) reject limit 10; select * from etbl;
报错信息
KUP-01005: syntax error: found "identifier": expecting one of: "binary_double, binary_float, comma, char, convert_error, date, defaultif, decimal, double, float, integer, (, lls, lls_compat, no, nullif, oracle_date, oracle_number, position, raw, recnum, ), unsigned, varrawc, varchar, varraw, varcharc, zoned" KUP-01008: the bad identifier was: FILLER
错误原因
外部表中FILLER的用法和SQL*Loader控制文件存在差异,核心错误有两点:
- 不能直接用FILLER作为字段名:FILLER是关键字,必须给每个要跳过的字段指定一个合法的自定义名称,再后跟FILLER关键字。
- FILLER字段必须指定数据类型:不能只写
字段名 FILLER,必须像普通字段一样明确指定数据类型(比如char(200))。
修正后的创建语句
给每个跳过的字段赋予唯一自定义名称,同时指定FILLER关键字和对应数据类型:
create table etbl (EMPLOYEE_ID number, EMAIL varchar2(200), SALARY number) organization external ( type oracle_loader default DIRECTORY dir1 access parameters ( records delimited by NEWLINE skip 1 logfile 'log.txt' badfile 'emp.bad' fields terminated by ',' optionally ENCLOSED by '"' MISSING field values are null ( EMPLOYEE_ID char(200), FIRST_NAME FILLER char(200), SKIP_COL2 FILLER char(200), EMAIL char(200), SKIP_COL3 FILLER char(200), SKIP_COL4 FILLER char(200), SKIP_COL5 FILLER char(200), SALARY char(200), SKIP_COL6 FILLER char(200), SKIP_COL7 FILLER char(200), SKIP_COL8 FILLER char(200) ) ) location ('emp.txt') ) reject limit 10;
内容的提问来源于stack exchange,提问作者Erik
相关产品推荐
相关产品推荐

