您现在的位置是:首页
>
外表什么意思 教会你掌握oracle外表
教会你掌握oracle外表 外表 exter al ta le 就像普通的表对像一样 可以 elect等 只是它是只读的 数据库中只保存了表结构的描述 表数据却没有存放在数据库内 而是存放在了文件

教会你掌握oracle外表
外表(external table)就像普通的表对像一样 可以select等 只是它是只读的 数据库中只保存了表结构的描述 表数据却没有存放在数据库内 而是存放在了文件系统上 当用户想偶尔使用数据库外的结构化数据时 用起外表来就非常方便 甚至比sqlldr都要方便的多 在这篇文章里 我们为大家演示了三步就掌握oracle外表过程 通过这次学习 也许大家就会发展原来学习oracle也是好容易哦 第一步 创建目录并授权 目录是数据文件的存放目标 数据文件通常要求是文本文件 这个过程在 i以前是需要配置utl_file_dir参数的 sys@TEST>!ls /home/oracle/temp user ctl userlist txt user log rudolf@TEST> sys@TEST>conn system/alibaba Connected sys@TEST> sys@TEST>CREATE DIRECTORY TEMP AS /home/oracle/temp/ ; Directory created sys@TEST>grant read write on directory TEMP to rudolf; Grant succeeded 第二步 创建外表与测试 rudolf@TEST>CREATE TABLE USERLIST ( ID NUMBER USERNAME VARCHAR ( ) EMAIL VARCHAR ( ) ) ORGANIZATION external ( TYPE oracle_loader DEFAULT DIRECTORY TEMP ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET US ASCII BADFILE TEMP : userlist bad DISCARDFILE TEMP : userlist dis LOGFILE TEMP : user log READSIZE FIELDS TERMINATED BY OPTIONALLY ENCLOSED BY LDRTRIM MISSING FIELD VALUES ARE NULL REJECT ROWS WITH ALL NULL FIELDS ( ID CHAR( ) TERMINATED BY OPTIONALLY ENCLOSED BY USERNAME CHAR( ) TERMINATED BY OPTIONALLY ENCLOSED BY EMAIL CHAR( ) TERMINATED BY OPTIONALLY ENCLOSED BY ) ) location ( userlist txt ) )REJECT LIMIT UNLIMITED rudolf@TEST>/ Table created rudolf@TEST>l select id username from userlist where rownum < * rudolf@TEST>/ ID USERNAME RudolfLu tomgu coug chao_ping parrotao cnoug FilsDeDragon Dragon rows selected 第三步 理解外表数据结构与create table anization external语法 大家都用过sqlldr吧?外表的数据文件的结构呢就同sqlldr能读的数据文件结构一样了 那么语法呢?嘿嘿 别急 让我们先来做个sqlldr的练习吧 [oracle@rac temp]$ head userlist txt RudolfLu tomgu coug chao_ping parrotao cnoug FilsDeDragon Dragon Xavier [oracle@rac temp]$ cat user ctl LOAD INFILE /home/oracle/temp/userlist txt badfile /home/oracle/temp/userlist bad discardfile /home/oracle/temp/userlist dis APPEND INTO TABLE userlist fields terminated by optionally enclosed by trailing nullcols ( id char( ) username char( ) ) rudolf@TEST>create table userlist (id number username varchar ( ) ); Table created rudolf@TEST>! [oracle@rac temp]$ sqlldr rudolf/nix@test world control= /user ctl external_table=GENERATE_ONLY 注意 我们加了一个external_table的参数 它的作用是告诉sqlldr不用真实load数据 而是生成包含external table 创建脚本的log文件 [oracle@rac temp]$ ls user ctl userlist txt user log [oracle@rac temp]$ cat user log SQL*Loader: Release Production on Wed Dec : : Copyright (c) Oracle Corporation All rights reserved Control File: /user ctl Data File: /home/oracle/temp/userlist txt Bad File: /home/oracle/temp/userlist bad Discard File: /home/oracle/temp/userlist dis CREATE DIRECTORY statements needed for files CREATE DIRECTORY SYS_SQLLDR_XT_TMPDIR_ AS /home/oracle/temp/ CREATE TABLE statement for external table: CREATE TABLE SYS_SQLLDR_X_EXT_USERLIST ( ID NUMBER USERNAME VARCHAR ( ) ) ORGANIZATION external ( TYPE oracle_loader DEFAULT DIRECTORY SYS_SQLLDR_XT_TMPDIR_ ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET US ASCII BADFILE SYS_SQLLDR_XT_TMPDIR_ : userlist bad DISCARDFILE SYS_SQLLDR_XT_TMPDIR_ : userlist dis LOGFILE user log_xt READSIZE FIELDS TERMINATED BY OPTIONALLY ENCLOSED BY LDRTRIM MISSING FIELD VALUES ARE NULL REJECT ROWS WITH ALL NULL FIELDS ( ID CHAR( ) TERMINATED BY OPTIONALLY ENCLOSED BY USERNAME CHAR( ) TERMINATED BY OPTIONALLY ENCLOSED BY ) ) location ( userlist txt ) )REJECT LIMIT UNLIMITED lishixinzhi/Article/program/Oracle/201311/18672 很赞哦! (1099)