首页 > 技术文章 > oracle 外部表

yclh 2021-05-28 19:01 原文

简单的样例告诉你如何使用外部表

 

1、外部表概述

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

注:感觉说了一堆也不通俗易懂。

 

2、外部表能干什么

     比如你有一个excle文件,现在需要你对这些数据进行统计分析,是不是有点麻烦这些数据如果在数据库里就好了,什么统计查询,就是几条sql语句的事。外部表就是把这种文件变得可以查询数据库普通表那样查询这些数据。

实际工作中总是有些excle或者其他格式的数据要导入数据库进行统计分析,怎么导入这些数据写java代码有点麻烦,我更喜欢只操作数据就搞定。

例如:咱们现在有一个excle文件内容是这样的,如何把他变成数据库里的表呢?

 

3、excle变成数据库的表

  (1)用excle把这个表另存为1.csv

             csv的本质就是","号隔开的字段如:

 

 (2)在数据库中创建一个路径并赋权限给指定的用户

create directory dbycdir as '/u01/app/oracle/product/11.2.0/db_1';
grant read on directory dbycdir to yc;
grant write on directory dbycdir to yc;

(3)将1.csv文件拖到/u01/app/oracle/product/11.2.0/db_1路径下

(4)用yc用户登录数据库创建外部表

   

  CREATE TABLE WB_T
   (
        CODE                         VARCHAR2(60 BYTE),     --代码                                                                                                        
        NAME                         VARCHAR2(60 BYTE)      --名称                                                                                                                                       
   )
    ORGANIZATION EXTERNAL
     ( TYPE ORACLE_LOADER   --指定外部表的访问方式,9i不支持oracle_datapump
       DEFAULT DIRECTORY   dbycdir --目录
       ACCESS PARAMETERS
       (
       RECORDS
            DELIMITED BY NEWLINE characterset zhs16gbk
            SKIP 1    --表示跳过第一行,因为第一行是标题栏
       fields
            terminated by ','  --表示字段之间的分割标识
            LRTRIM
            MISSING FIELD VALUES ARE NULL REJECT ROWS WITH ALL NULL FIELDS
     )
       LOCATION
        (  '1.csv'  --数据从那个文件来
        )
     )
  ;

 (5)ok了现在用yc登录数据查询WB_T表

 

 

注:普通表存在表空间对应的数据文件里,而外部表的数据就存在你指定的文件里,上述例子中数据就存在1.csv中,如果你在操作系统里1.csv删除数据就没有了。

                                                     

        

 

 

 

 

    

 

推荐阅读