oracle inside(5)
來源:互聯網
上載者:User
5.1 大對象資料類型
1. 大對象資料類型(LOB)可以存貯高達4GB的非結構化資料(如文本、映像、視訊剪輯、聲音訊號等)。
對象 位置 描述
CLOB 內部 字元大型物件,儲存多達4GB的單位元組字元,其中的字元與資料庫當前的
字元集對應
NCLOB 內部 國家特有字元大型物件,儲存多達4GB的單位元組字元或多位元組字元,其中
的字元符合ORACLE資料庫定義的國家特有字元集
BLOB 內部 二進位大型物件,儲存多達4GB的原始(未結構化)的資料
BFILE 外部 二進位檔案,存貯為作業系統可存取的檔案,使ORACLE可以操縱它,這
些檔案可以位於各種存貯裝置上,包括DVD_ROW、CD_ROW和磁碟機
外部指的是一個物理檔案,即作業系統可以訪問該檔案,該檔案並不存貯於資料庫中,ORACLE使用它
來存貯檔案名稱和檔案位置;內部對象將一個定位器存貯在表的一個大型物件欄位中,定位器指向資料在表
中的實際位置。因此,檢索LOB對象時,只返回資料定位器,而不返回實際的資料項目。
LOB 可以在整個會話期間都存在,或者是臨時的。
局限性:
1) LOB 不能用於ORACLE進階表存貯技術,如群集;
2) LOB 不能出現在 GROUP BY、ORDER BY、SELECT DISTINCT、JOIN 語句或群集中。然而LOB
可以出現在使用 UNION ALL 的語句中;
3) 禁止分布式LOB;
4) LOB 不允許出現在VARRAY中。
2. 大對象資料類型與LONG型的區別:
1) 可以在單條記錄中存貯多個LOB,而每條記錄只能存貯一個LONG或LONG RAW資料;
2) LOB 能夠具有使用者定義的資料類型的屬性,而LONG或LONG RAW不可以;
3) 只有LOB定位器能存貯在表欄位中,BLOB和CLOB資料能夠存貯在獨立的資料表空間中,而BFILE 資料作
為外部檔案存貯。對於LONG和LONG RAW 而言,整個值被存貯在表欄位中;如果LOB小於3964位元組,
則整個LOB被存貯在表欄位中。
4) 訪問LOB欄位時,返回的是定位器;訪問LONG或LONG RAW 時,返回的是整個值;
5) LOB 可多達4GB,而BFILE 的最大尺寸取決於作業系統,但不能超過 4GB,其有效取值範圍為 1--
2**32-1;而LONG 或LONG RAW 不能超過2GB。
6) LOB 以隨機、準確的方式操縱資料,其靈活性比 LONG 或 LONG RAW 資料更大;可以以隨機的位移
訪問LOB,而LONG 必須從頭開始訪問,再到需要的位置。
7) 在本地和分布式環境中都可以使用LOB;而對LONG 或 LONG RAW 而言,這是不可能的。
8) TO_LOB 函數將已有的LONG 欄位轉換為LOB;
3. 定位器:
定位器被存貯在大型物件欄位中,並指向資料存貯的實際位置。理解使用Oracle定位器時,在事務級
發生了什麼事情非常重要。將LOB從一條記錄中拷貝到下一條記錄時,將建立一個定位器,並拷貝和貯存
來自源記錄的所有資料。
如果刪除一條記錄,而沒有將所有的內容拷貝到新記錄中,則LOB中的所有資料都將丟失。刪除內部
LOB時,定位器和LOB的內容都將被刪除;刪除外部BFILE時,檔案依然存在,但是定位器被刪除。
將內部LOB添加到表中時,需要建立一個定位器,方法是將資料賦給LOB欄位,或者使用EMPTY_BLOB
或 EMPLY_CLOB;將外部 BFILE 添加到表中時,應該使用BFILENAME 將定位器賦給相應的欄位。
使用 LOB 時,應該鎖定它,以防止其他使用者訪問此 LOB。
PL/SQL 進階編程
第 15 頁 共 15 頁
5.2 在Oracle8i 資料庫中使用外部檔案:
1. 建立目錄對象:
在能夠訪問外部檔案之前,需要建立目錄對象。目錄對象將一個名稱映射為一個指定的路徑。文法如下:
CREATE OR REPLACE DIRECTORY dir_name AS src_path;
其中:
dir_name是與路徑相關的目錄對象的名稱;
src_path是檔案的實體路徑。
SELECT * FROM all_directories; --查看路徑資訊;
2. BFILE 的局限性:
BFILE 資料類型不為 commit 和 rollback 提供事務性支援。同時,檔案以唯讀方式開啟,因此不
能以任何方式寫或修改這些外部檔案。
編輯init.ora 檔案,並修改 session_max_open_files= 20語句以適應要求。當收到“開啟文
件過多”的訊息後,程式異常結束而不關閉所有已開啟的檔案。
3. BFILE 的屬性:
BFILE資料類型是RAW型。
5.3 DBMS_LOB 包
BFILE 是Oracle 中唯一的外部資料類型,因此Oracle 提供了只能用於外部 LOB的函數:
名稱 訪問的對象 描述
BFILENAME BFILE 在PL/SQL塊表中建立一個指向檔案位置的指標(定位器)
COMPARE 所有的LOB 比較兩個檔案的全部或部分內容
FILECLOSE BFILE 關閉與BFILE定位器關聯的檔案
FILECLOSEALL BFILE 關閉開啟的所有檔案
FILEEXISTS BFILE 檢查檔案是否位於定位器指定是位置
FILEGETNAME BFILE 返回目錄對象和BFILE的路徑
FILEISOPEN BFILE 檢查檔案是否已經開啟
FILEOPEN BFILE 真正開啟檔案
GETLENGTH 所有的LOB 返回LOB 的實際長度
INSTR 所有的LOB 在LOB 中搜尋與指定的字串匹配的模式
READ 所有的LOB 將LOB 中指定的內容讀取到緩衝區中
SUBSTR 所有的LOB 返回參數指定的LOB的全部或部分內容
5.3.1 函數說明
1) BFILENAME 函數:
使用外部檔案或將BFILE 的定位器插入到表中時,需要調用BFILENAME 函數,該函數建立一個指向
外部檔案的定位器。BFILENAME 函數的文法如下:
FUNCTION BFILENAME( Directory_Object IN VARCAHR2, Filename IN VARCHAR2)
RETUTN BFILE_Locator;