设为首页 收藏本站
查看: 1292|回复: 0

[经验分享] 【转】外部表external table OCP--047-16/56

[复制链接]

尚未签到

发表于 2015-6-17 07:36:23 | 显示全部楼层 |阅读模式
  外表(external table)就像普通的表对像一样,可以select等,只是它是只读的,数据库中只保存了表结构的描述,表数据却没有存放在数据库内,而是存放在了文件系统上。当用户想偶尔使用数据库外的结构化数据时,用起外表来就非常方便,甚至比sqlldr都要方便的多
  外部表是在数据库以外的文件系统上存储的只读表,例如EXCEL、CSV等文件
  定义
  External tables access data in external sources as if it were in a table in the database.
  You can connect to the database and create metadata for the external table using DDL.
  The DDL for an external table consists of two parts: one part that describes the Oracle
  column types, and another part (the access parameters) that describes the mapping of
  the external data to the Oracle data columns.
  u 创建的语法类似于: "CREATE TABLE ... ORGANIZATION EXTERNAL"
  u 数据在数据库的外部组织,是操作系统文件。
  u 操作系统文件在数据库中的标志是通过一个逻辑目录来映射的。        
  u 数据是只读的。(外部表相当于一个只读的虚表)
  u 不可以在上面运行任何 DML 操作,不可以创建索引。     
  u 可以查询操作和连接。可以并行操作。
  An external table is a read-only table that is defined within the database but exists outside of the database.
  --外部表是一个在数据库里定义的只读表,但是它存在于数据库的外部。
In more technical terms, the external table’s metadata is stored inside the database, and the data it contains is outside of the database.
    --用技术术语表达就是,外部表的元数据保存在数据库里,但是数据不在数据库里。
You can query them with the SELECT statement,but you cannot use any other DML statement on them.
    --可以select,但是不可以使用DML.
you can't create an INDEX on them,and they won't accept constraints.
    --不可以在外部表上创建索引index,也不允许添加约束
We specify that we are using ORACLE_LOADER, aka the SQL*Loader feature. An ALTERNATIVE type value here would be ORACLE_DATABUMP.
  
  
  
  建立外部表的步骤
  1、创建以“,”分隔的文件“TestTable.csv”至“D:\Test”
  2、创建一个Directory:  



create directory TestTable_diras 'D:\Test' ;
  3、创建一个外部表:   



create table TestTable(
ID varchar2 ( 10 ),
NAME varchar2 ( 20 ),
TYPE varchar2 ( 20 ),
AGEvarchar2 ( 20 ))
organization external (
type oracle_loader
default directory TestTable_dir
access parameters (fields terminatedby ',' )
location ( 'TestTable.csv' )
);
  各类参数说明
  1、type oracle_loader
  数据转换驱动器,oracle_loader为默认,也可以改换其他
  2、defaultdirectory TestTable_dir
  location ('TestTable.csv')
  指定外部表所在文件夹以及指定文件
  3、accessparameters
  设置转换参数,例如(fields terminatedby',')表示以','为字段间的分隔符
  ● 参数由访问驱动程序定义
  
  外部表的错误处理
  1、REJECT LIMIT子句
  在创建外部表时最后加入LIMIT子句,表示可以允许错误的发生个数。
  * 默认的REJECT LIMIT值为0
  * REJECT LIMIT UNLIMITED则不会报错
  2、BADFILE 和 NOBADFILE 子句
  在accessparameters中加入BADFILE'BAD_FILE.txt'子句,则所有数据转换错误的值会被放入'BAD_FILE.txt'中
  使用NOBADFILE子句则表示忽略转换错误的数据
  ● 如果不写BADFILE或NOBADFILE,则系统自动在源目录下生成与外部表同名的.BAD文件
  ● BADFILE只能记录前1次操作的结果,他会被第2次操作所覆盖。
  3、LOGFILE 和 NOLOGFILE 子句
  在accessparameters中加入LOGFILE'LOG_FILE.log'子句,则所有Oracle的错误信息放入'LOG_FILE.log'中
  使用NOLOGFILE子句则表示不记录错误信息到log中
  ● 如果不写LOGFILE或NOLOGFILE,则系统自动在源目录下生成与外部表同名的.LOG文件
  
  修改外部表语句
  外部表与堆表一样可以之用ALTER TABLE命令修改表属性
  * REJECT LIMIT        --错误数
  * DEFAULT DIRECTORY   --默认目录
  * ACCESS PARAMETERS   --参数
  * LOCATION            --数据文件
  * ADD COLUMN          --增加列
  * MODIFY COLUMN       --列定义
  * DROP COLUMN         --删除列
  * RENAME TO           --外部表更名
  外部表的一些限制:
# 不支持含有加密字段(Encrypted column)的导入与导出。
# 外部表不知道保存在数据库中的数据。
# 外部表不知道数据是如何在外部数据源中保存的。这是access parameter的功能。
# 外部表不能导入数据到LONG字段。
  其他约束
      ● 外部表无法使用insert、update、delete等操作,要修改其数据只能通过修改数据文件。
      ● 外部表不能建立索引,如要建立,则需要先create table XX as select * from TestTable
  PS:
  1.外部表可以加载和卸载数据泵格式的数据,只需把organization external里的参数type设置为oracle_datapump。



create table all_objects_unload
organization external
(
type oracle_datapump
default directory testdir
location('allobjects.dat')
)
as
select * from all_objects
  
  2、例:用test创建一个external table emp_load



create table emp_load
  (
   employee_number char(5),
  employee_dob char(20),
  employee_last_name char(20),
  employee_first_name char(15),
  employee_middle_name char(15),
  employee_hire_date date
    )
organization external
  (type oracle_loader
  default directory def_dir
  access parameters
  (records delimited by newline
  fields (
         employee_number char(2),
  employee_dob char(20),
  employee_last_name char(18),
  employee_first_name char(11),
  employee_middle_name char(11),
  employee_hire_date char(10) date_format date mask "mm/dd/yyyy"
  )
  )
  location ('info.dat')
);
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-78015-1-1.html 上篇帖子: OCP笔记 下篇帖子: ocp 042 第十八章:移动数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表