外部表的建立
?
??? 外部表是在數據庫以外的文件系統上存儲的只讀表,例如EXCEL、CSV等文件
?
??? 建立外部表的步驟如下:
?
??? 1、創建以“,”分隔的文件“TestTable.csv”至“D:\Test”
?
??? 2、創建一個Directory:
??? create
directory
TestTable_dir
as
'D:\Test'
;
?
??? 3、創建一個外部表:
??? create
table
TestTable(
??? ??
ID
varchar2
(
10
),
??? ??
NAME
varchar2
(
20
),
??? ??
TYPE
varchar2
(
20
),
??? ?? AGE
varchar2
(
20
)
)
??? organization
external
(
??? ??
type
oracle_loader
??? ??
default
directory
TestTable_dir
??? ??
access
parameters
(fields terminated
by
','
)
??? ??
location
(
'TestTable.csv'
)
??? ?? );
?
??? 需要注意兩點:
??? ● 使用number類型時須發查詢數據(不知道為什么)
??? ● 在建csv表時無需加表頭,否則會多出一行數據來
?
?
各類參數說明
?
??? 1、type oracle_loader
?
????? 數據轉換驅動器,oracle_loader為默認,也可以改換其他
?
??? 2、defaultdirectory TestTable_dir
?????? location ('TestTable.csv')
?
????? 指定外部表所在文件夾以及指定文件
?
??? 3、accessparameters
?
????? 設置轉換參數,例如(fields terminated by',')
表示以','為字段間的分隔符
????? ● 參數由訪問驅動程序定義
?
?
外部表的錯誤處理
?
??? 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?????????? --外部表更名
?
?
其他約束
?
??? ● 外部表無法使用insert、update、delete等操作,要修改其數據只能通過修改數據文件。
?
??? ● 外部表不能建立索引,如要建立,則需要先create table XX as select * from TestTable
?
?
?
?