外部表是存儲於數據庫外的一種表,它允許以只讀的形式讀取外部表裏的數據. 你可以像普通表一樣對外部表進行SELECT, SORT, JOIN操作,也可以在外部表上建視圖,同義詞等,但不能有DML操作,不能創建索引。
生成外部表時,會在目錄下自動生成日誌文件。
生成的外部表並不是實際存在,不會佔用存儲空間。
創建外部表
using:CREATE TABLE...ORGANIZATION EXTERNAL
type - 指定外部表的類型。兩個可用類型是ORACLE_LOADER類型和ORACLE_DATAPUMP類型。每種類型的外部表是由它自己的訪問驅動程序所支持。
ORACLE_LOADER:默認,只能從外部表到內部表,數據來源是文本文件
ORACLE_DATAAPUMP:可以從外部表到內部表,也可從內部表到外部表,數據源只能是二進制文件.
default directory: 加載或卸載的默認目錄,指的是directory 對象,而不是物理路徑
location: 數據文件名,格式directory:file direcotry 如果沒有顯式指明,默認 default_directory
e.g 使用ORACLE_LOADER導入數據文件
在E:/oracle/data目錄下新建
ex1.txt
1,hello
2,wuhen
ex2.txt
3,hello
4,world
create directory wuhen as 'E:/oracle/data'; --創建目錄對象
grant read,write on drirectory wuhen to wuhen; --授權
create table ex_t1 --創建外部表
(c1 varchar2( 5),c2 varchar2 (20))
organization external
(
type oracle_loader
default directory wuhen --指定外部表的存放目錄
access parameters (records delimited by newline
fields terminated by ','
)
/*
records delimited 讀取記錄,默認by newline,以換行符爲一記錄
fields terminated by ',' 讀取字段,默認 by ',',以逗號爲字段分隔
*/
location('ex1.txt' ,'ex2.txt') --數據文件,在默認目錄下,可有多個文件
);
驗證
SQL> select * from ex_t1;
C1 C2
----- --------------------
1 hello
2 wuhen
3 hello
4 world
e.g 使用ORACLE_DATAPUMP 導出數據文件
create table ex_t3(c1,c2,c3) --創建外部表
organization external
(
type oracle_datapump
default directory wuhen
ACCESS PARAMETERS (nologfile)
/*
nogfile 不生成日誌文件,此處也可LOGFILE wuhen:ex_t3 指定日誌文件位置,在wuhen目錄對象下生成ex_t3.log
11g 還有 COMPRESSION [ENABLED | DISABLED]指定是否對數據進行壓縮
ENCRYPTION [ENABLED | DISABLED] 指定是否對數據進行加密
*/
location ('ex3.dmp' ))
as
select username,user_id,password from dba_users where rownum < 3;
驗證
select * from ex_t3;
C1 C2 C3
------------------------------ ---------- ------------------------------
MGMT_VIEW 57 A9C0D2A4F6B75CBC
SYS 0 262FBDE157DFFFA5