Exteernal table ORA-29913,ORA-30653,KUP-01005

1. create directory
$ sqlplus / as sysdba

SQL> create or replace directory DPUMPDIR  as '/home/oracle/dmp';

SQL> col owner for a5;
SQL> col directory_name for a15;
SQL> col directory_path for a20;

SQL> SELECT *  FROM  dba_directories where directory_name='DPUMPDIR';
OWNER DIRECTORY_NAME  DIRECTORY_PATH
----- --------------- ----------------
SYS   DPUMPDIR        /home/oracle/dmp

SQL>grant read ,write on directory  DPUMPDIR  to &user;


2.编辑数据文件emp.dat
 将emp.dat存放到emp.dat放到directory对应的目录下,即/home/oracle/dmp
 emp.dat 内容如下:
 
EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO
7369,SMITH,CLERK,7902,17-DEC-80,800,,20
7499,ALLEN,SALESMAN,7698,20-FEB-81,1600,300,30
7521,WARD,SALESMAN,7698,22-FEB-81,1250,500,30
7566,JONES,MANAGER,7839,02-APR-81,2975,,20
7654,MARTIN,SALESMAN,7698,28-SEP-81,1250,1400,30
7698,BLAKE,MANAGER,7839,01-MAY-81,2850,,30
7782,CLARK,MANAGER,7839,09-JUN-81,2450,,10
7788,SCOTT,ANALYST,7566,19-APR-87,3000,,20
7839,KING,PRESIDENT,,17-NOV-81,5000,,10
7844,TURNER,SALESMAN,7698,08-SEP-81,1500,0,30
7944,TURNER,SALESMAN,7698,08-SEP-81,1500,0,30


3.创建外部表 create external_table
SQL> conn scott/tiger
Connected.

SQL> show user;
USER is "SCOTT"

SQL>  create table ext_emp
  2     (EMPNO NUMBER(4) ,
  3      ENAME VARCHAR2(10),
  4      JOB VARCHAR2(9),
  5      MGR NUMBER(4),
  6      HIREDATE DATE,
  7      SAL NUMBER(7, 2),
  8      COMM NUMBER(7, 2) ,
  9      DEPTNO NUMBER(2)
 10     )
 11     ORGANIZATION EXTERNAL
 12     ( type oracle_loader
 13       default directory DPUMPDIR
 14       access parameters
 15       (
 16       fields terminated by ',' )
 17       location ('emp.dat')
 18     );
Table created 
  
SQL> select * from ext_emp;
select * from ext_emp
*
ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEFETCH callout
ORA-30653: reject limit reached

在对应的directory目录下查看外部表对应的bad和log日志,发现加载的数据文件中有标题
修改创建外部表的语句,在其中加入 skip=1 重新创建。(或者直接删除标题行也可以)

SQL>  create table ext_emp
  2     (EMPNO NUMBER(4) ,
  3      ENAME VARCHAR2(10),
  4      JOB VARCHAR2(9),
  5      MGR NUMBER(4),
  6      HIREDATE DATE,
  7      SAL NUMBER(7, 2),
  8      COMM NUMBER(7, 2) ,
  9      DEPTNO NUMBER(2)
 10     )
 11     ORGANIZATION EXTERNAL
 12     ( type oracle_loader
 13       default directory DPUMPDIR
 14       access parameters
 15       (
 16       skip=1
 17       fields terminated by ',' )
 18       location ('emp.dat')
 19     );
 
Table created
SQL> select * from ext_emp;
select * from ext_emp
 
ORA-29913: 执行 ODCIEXTTABLEOPEN 调出时出错
ORA-29400: 数据插件错误KUP-00554: error encountered while parsing access parameters
KUP-01005: syntax error: found "skip": expecting one of: "column, fields, records"
KUP-01007: at line 1 column 1
 
 
在创建外部表的语句中加入结束标记 records delimited by newline,
指定记录以换行符结束,重新创建。
SQL> drop table ext_emp;
Table dropped
 
SQL>  create table ext_emp
  2     (EMPNO NUMBER(4) ,
  3      ENAME VARCHAR2(10),
  4      JOB VARCHAR2(9),
  5      MGR NUMBER(4),
  6      HIREDATE DATE,
  7      SAL NUMBER(7, 2),
  8      COMM NUMBER(7, 2) ,
  9      DEPTNO NUMBER(2)
 10     )
 11     ORGANIZATION EXTERNAL
 12     ( type oracle_loader
 13       default directory DPUMPDIR
 14       access parameters
 15       (
 16       records delimited by newline
 17       skip=1
 18       fields terminated by "," )
 19       location ('emp.dat')
 20     );
 
Table created

SQL> select count(1) from ext_emp;
 
  COUNT(1)
----------
        11

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值