Oracle資料庫基礎學習13 外部表

2021-10-25 09:38:05 字數 3514 閱讀 8716

外部表是指儲存在外部檔案中的資料,oracle可以通過建立外部表以唯讀的方式來查詢檔案資料的內容,這對於檔案資料的分析非常有用,而且還可以輕鬆的將外部表的內容插入到資料庫中

注意:oracle只能處理位於oracle伺服器上的外部檔案,它依賴於oracle的目錄物件和 oracle_loader 來載入外部檔案中的資料

實際上建立外部表只是在資料字典中新增了外部表的元資料資訊,並沒有在資料庫中為外部檔案建立資料表。oracle通過訪問驅動程式來讀取外部表中的資料。oracle提供了兩種訪問驅動,預設使用 oracle_loader 作為載入並訪問外部檔案的驅動。

下面是一張員工表的基本員工資訊,儲存為csv檔案,字段內容以逗號分隔

360,json,clerk,121,2008-09-12,3000,0,50,jjanus

361,rose,sales,145,2009-02-05,8000,0.1,80,mjasper

362,marry,ad_rep,200,2010-10-12,5500,0,10,bstarr

363,henny,account,145,2008-11-12,9000,0.15,90,aalda

接下來將使用如下幾個步驟來建立乙個使用 oracle_loader 作為訪問驅動的外部表

1、要能訪問伺服器上的作業系統中的檔案,首先必須在資料庫中建立乙個指向該資料檔案所在位置的目錄物件,通過目錄物件訪問相應的作業系統檔案。假設員工表 empxt1.csv 檔案位於 /home/oracle/flatfiles/data 資料夾中,可以使用如下的**建立乙個oracle目錄物件

create or replace directory admin_dat_dir as '/home/oracle/flatfiles/data';
由於外部表在載入過程中,還可以產生日誌檔案和未成功匯入的錯誤檔案,因此也可以分別為這幾個檔案將存放的位置分別建立伺服器目錄

create or replace directory admin_log_dir as '/home/oracle/flatfiles/log';

create or replace directory admin_bad_dir as '/home/oracle/flatfiles/bad';

2、建立目錄物件之後,接下來開始建立乙個外部表,外部表使用 organization external 子句指定其為外部表,外部表的建立分為兩部分:一部分是描述列的資料型別;另一部分是描述作業系統檔案資料於表列的對應關係

create table ext_emp

( employee_id number(4), --員工編號

emp_name varchar2(20), --員工英文名

job_id varchar2(30), --職位簡稱

manager_id number(4), --經理編號

hire_date date, --入職日期

salary number(8,2), --入職工資

commission_pct number(2,2), --如果是銷售人員的提成率

department_id number(4), --所在部門編號

email varchar2(25) --郵件位址

)organization external --表示建立乙個外部表

( type oracle_loader --使用 oracle_loader 驅動

default directory admin_dat_dir --資料所在的伺服器目錄

access parameters --訪問引數

( records delimited by newline --每條記錄通過換行符區分

characterset utf8 --讀取的伺服器端字符集

bdafile admin_bad_dir:'empxt%a_%p.bad' --錯誤檔案的存放路徑

logfile admin_log_dir:'empxt%a_%p.log' --日誌檔案的存放路徑

fields terminated by ',' --欄位之間使用逗號分隔

missing field values are null --不存在的字段值用null

( employee_id,emp_name,job_id,manager_id,

hire_date char date_format date mask "yyyy-mm-dd",

salary,commission_pct,department_id,email

) )location ('empxt1.csv', 'empxt2.csv') --要載入的外部檔案列表

)reject limit unlimited; --不限制任何資料錯誤的次數

下面來分析以下這個外部表建立**的實現過程

可以看到外部表的建立也是使用 create table 語句,後面跟要建立的表結構字段

在定義了表結構之後,使用 organization external 開始外部表的配置過程,同時也表示該表是乙個來自外部檔案的表,該錶本身不包含任何資料,它只是建立到外部檔案引用的元資料

type oracle_loader 用來指定將使用 oracle_loader 訪問驅動來訪問資料庫,因此 access parameters 引數都會針對這個訪問驅動進行配置

default directory 用來指定外部檔案所在的預設路徑

在 access parameters 內部的 records delimited by newline 指定外部檔案的換行方式是換行符

characterset 指定字符集

bdafile 用來指定如果匯入失敗是=時,將要儲存的錯誤檔案的位置,一般以 .bad 作為副檔名

logfile 用來指定載入過程中的日誌記錄,通過日誌可以了解到外部表的載入成功與否,並可以檢視詳細的失敗資訊

fields terminated by 用來指定欄位的分隔符,這裡使用逗號分隔,因此在單引號中直接輸入了 , 號。其他的特殊符號使用十六進製制表示,比如 tab鍵使用 0x'09' 表示。它們通過 0x + 「十六進製制」 的表示方法。

接下來指定要載入的字段列表,在這裡可以單獨指定外部檔案的字段型別和 terminated 的分隔方式

missing field values are null 用來指定當某些字段值為空時,將其設為 null

location 用來指定外部檔案在伺服器目錄中的位置,如果有多個檔案,只要它們的基本結構相同,都可以進行匯入,多個檔案之間以逗號分隔

reject limit unlimited 在建立外部表時最後加入 limit 子句,表示可以允許錯誤的發生個數,預設值為0.設定為 unlimited 則錯誤不受限制

在成功的建立了外部表之後,就可以像查詢普通表一樣查詢外部檔案,還可以將外部表中的資料插入到乙個新錶,實現外部檔案的匯入工作。如果外部表資料載入失敗,可以查詢在 logfile 和 badfile 中指定日誌和錯誤檔名來檢視詳細的錯誤資訊。外部表中的資料是唯讀的,不能對外部表進行dml操作。

Oracle資料庫基礎學習04 啟動資料庫

oracle的例項必須處於正常啟動的狀態,客戶端才能夠連線和運算元據庫的資料。在oracle中,啟動資料庫包含將一系列的程序和記憶體執行起來,並載入控制檔案中的資料庫。oracle的啟動過程分好幾個階段,可以通過命令列引數設定啟動到特定的階段。最簡單的啟動方式是在sql plus中使用 startu...

oracle資料庫基礎

1.什麼叫關係型資料庫 基於關係模型的資料庫就叫關係型資料庫。2.那什麼叫關係模型了 使用的儲存結構是多個二維表,實體與實體間的聯絡都是用關係來表示的。oracle資料庫是關係型資料庫 1.sql plus的常用命令 1 conn ect 用法 conn 使用者名稱 密碼 網路服務名 as sysd...

Oracle資料庫基礎!

ddl 資料庫定義語言 dml 資料庫操縱語言 dql 資料庫查詢語言 oracle 甲骨文公司的產品 字元型 char 日期型別date 大字段 樣本資料庫 約束 限制表中的列可以存放什麼樣的資料 not null不允許為空 check一種檢查約束,開發不用 2 檢視表結構 desc 表名 3 資...