对外部表的理解及测试,,,,如有理解不正确请大家指正

语法:

create table 表名(

列名1,列名2,......

)

organization external  ###说明创建外部表

(

type 访问类型            ###一般是 ORACLE_LOADER ,ORACLE_DATAPUMP

default directory   路径名   ####指定默认目录对象

access parameter (        ###数据源文件与表中行之间的映射关系

records delimited by 设置分隔符    ###一般是newline

[badfile 路径名:'文件名']   ##存放错误日志的目录和文件名

[logfile 路径名:'文件名']    ##日志的目录和文件名

[discardfile 路径名:'文件名']  ###废弃文件存放的目录和文件名

fields terminated by  '分隔符'   ###设置文件中字段的分隔符

[ missing field values are null]   ##无值字段的处理

[reject rows with all null fields]   ##无值行的处理

( 列名1, 列名2, .....)   

)

location (路径名:'数据文件名')

)

[reject limit(或unlimited) 数值 ] ###设置多少行转换失败时返回oracle错误,默认为0

[parallel]

例子:

1.在系统下创建三个目录

/home/oracle/test_folder/data --数据文件目录

touch test.dat --数据文件

录入数据

1001,abc,2013/07/12,1000
1002,abcd,2014/01/31,1000
1003,bdc,2012/03/12,1020

/home/oracle/test_folder/log  --日志文件目录

touch test.log --日志文件

/home/oracle/test_folder/bad --错误文件目录

touch test.bad --错误文件

2.创建目录

登陆 conn  / as sysdba 下

create or replace directory DATA_DIR AS '/home/oracle/test_folder/data' ;  --数据文件目录
create or replace directory LOG_DIR AS '/home/oracle/test_folder/log' ;--日志文件目录
create or replace directory BAD_DIR AS '/home/oracle/test_folder/bad' ;--错误文件目录

3.授权

grant write ,read on directory DATA_DIR to scott;
grant write ,read on directory LOG_DIR to scott;
grant write ,read on directory BAD_DIR to scott;

3.创建表
###在scott 用户下
create table ext_emp
(
 emp_no varchar2(10),
 epm_name varchar2(20),
 hirte_date date,
 comm number
)
organization external
(
 type ORACLE_LOADER
 default directory DATA_DIR
 access parameters
 (
  records delimited by newline
  badfile BAD_DIR:'test.bad'
  logfile LOG_DIR:'test.log'
  fields terminated by ','
  (
   emp_no,
   epm_name,
   hirte_date char date_format date mask 'yyyy-mm-dd',
   comm
  )
 )
 location('test.dat')
)
parallel
reject limit unlimited;

注意: 如果在access parameters 中  注释一些没有用的代码,系统认为这是不符合规则的语句,所以产生错误。

原因是我在测试的时候注释一些内容,所以查询的时候一直报错。

然后在网上找了报错的原因,一般都是说这是创建目录和授权及目录和文件访问权限或文件数据问题或语法引起的问题,

   然后一个一个排除是否是这些原因引起错误,后来发现都不是这些因素。

最后重新建表才发现是注释引起的错误。。。。。(抓狂啊)

例如:

access parameters
 (
  records delimited by newline
  badfile DATA_DIR:'zlc.bad'
  logfile DATA_DIR:'zlc.log'
  fields terminated by ','

-- missing field values are null  这两句可选的,
 -- reject rows with all null fields
  (
   emp_no,
   epm_name,
   hirte_date char date_format date mask 'yyyy-mm-dd',
   comm
  )
 )

如图:

然后查看 表结构发现 访问参数里面有注释 ,如图

---把上面的注释去掉问题就解决了。

select * from ext_emp

oracle 外部表及解决ora-29400,ora-29913错误的更多相关文章

  1. 如何利用Oracle外部表导入文本文件的数据

    同事最近在忙数据一致性比对工作,需要对不同文本文件中的数据进行比对,有的文件较大,记录较多,如果用普通的文本编辑器打开的话,很显然,会很卡,甚至打不开. 基于此,可将该文本文件的数据导入到数据库中,在 ...

  2. ORACLE外部表总结

    外部表介绍 ORACLE外部表用来存取数据库以外的文本文件(Text File)或ORACLE专属格式文件.因此,建立外部表时不会产生段.区.数据块等存储结构,只有与表相关的定义放在数据字典中.外部表 ...

  3. Oracle外部表的使用

    外部表可以像其它表一样,用select语句作查询.但不能做DML操作,不能建index,不接受约束.这是因为它不是以段的形式存于数据库中,只是以数据字典构造存在,指向一个或多个操作系统文件. 外部表的 ...

  4. Oracle外部表详解(转载)

    (外部表创建主要注意创建目录访问权限问题.目录路径格式无空格等不相关字符,即必须是当前表访问用户可以访问:关于表中行数的限制问题,如果不加限制注意添加reject limit unlimited:表中 ...

  5. oracle外部表

    关于外部表的描述 正确描述 the create table as select statement can be used to upload data into a normal table in ...

  6. Oracle外部表详解

    外部表概述 外部表只能在Oracle 9i之后来使用.简单地说,外部表,是指不存在于数据库中的表.通过向Oracle提供描述外部表的元数据,我们可以把一个操作系统文件当成一个只读的数据库表,就像这些数 ...

  7. 外部表查询时出现ORA-29913和ORA-29400错误

    create table t_ext_tab(id char(1),name char(6)) organization external( type oracle_loader default di ...

  8. Oracle外部表与SQLLDR

    两种方法建立外部表 在建表语句中把EXTERNAL_TABLE参数设定为SQLLDR: 从12C起,可以使用模式来运行SQLLDR: 在建表语句中把EXTERNAL_TABLE参数设定为SQLLDR: ...

  9. 使用oracle外部表进行数据泵卸载数据

    数据泵卸载Oracle9i引入了外部表,作为向数据库中读取数据的一种方法.Oracle 10g则从另一个方向引入了这个特性,可以使用CREATE TABLE语句创建外部数据,从而由数据库卸载数据.从O ...

随机推荐

  1. HDU1914(稳定婚姻)

    http://acm.hdu.edu.cn/showproblem.php?pid=1914 思路:Gale-Shapley算法.算法过程是男士不停地求婚,女士不停地拒绝.在每一轮中,每个尚未订婚的男 ...

  2. JavaSE部分之(1)Java基础

    JavaSE部分之(1)Java基础 1.为什么重写equals还要重写hashcode 为了提高程序的效率才实现了hashcode方法,先进行hashcode的比较,如果不同,那就没必要再进行equ ...

  3. socket短连接、长连接

    通常短连接是这样:连接->传输数据->关闭连接那什么是长连接?一般长连接相对短连接而言的,长连接在传输结束后不关闭连接,而不断的发送包保持连接等待处理下一个数据包. 一般长连接用于少数cl ...

  4. [vs执行报错] CRT detected that the application wrote to memory after end of heap buffer

    CRT 是c/c++ run-time lib , 是程序执行时所需的核心库. 这个错误是由于以对内在操作的过程中.所写的地址超出了.所分配内在的边界 有个建议是: 1.内存申请多少释放多少,释放掉你 ...

  5. Js通用验证

    //-----------------------------------------------------js 验证封装 zhy2014-07-10------------------------ ...

  6. ACdream区域赛指导赛之手速赛系列(7)

    A -Dragon Maze Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) Submi ...

  7. hdoj-1214-圆桌会议【逆序数】

    圆桌会议 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...

  8. Linux gadget驱动分析3------复合设备驱动

    windows上面对usb复合设备的识别需要下面条件. “ 如果设备满足下列要求,则总线驱动程序还会报告 USB\COMPOSITE 的兼容标识符: 设备描述符的设备类字段 (bDeviceClass ...

  9. touch事件的分发机制

    作者:谢昆 一段伪代码反应整个touch事件的分发 public boolean dispatchTouchEvent(MotionEvent event) { boolean consume = f ...

  10. MySQL之自定义函数实例讲解

    转自:https://www.2cto.com/database/201804/740205.html MySQL中已经有很多函数,如时间函数等,但是有时这些函数不能满足自己的设计需求,此时需要自定义 ...