我們大家都知道Oracle數據庫的Blob是一個較為特殊字段,它比long字段的實際應用性能更為好,它的主要功能是用來保存類似圖片之類的相關二進制的數據。以下就是文章的中主要內容的介紹。
寫入Blob字段和寫入其它類型字段的方式非常不同,因為Blob自身有一個cursor,你必須使用cursor對blob進行操作,因而你在寫入Blob之前,必須獲得cursor才能進行寫入,那麼如何獲得Blob的cursor呢?
這需要你先插入一個empty的blob,這將創建一個blob的cursor,然後你再把這個empty的blob的cursor用select查詢出來,這樣通過兩步操作,你就獲得了blob的cursor,可以真正的寫入blob數據了。
舉例如下:
Oracle系列:LOB大對象處理
主要是用來存儲大量數據的數據庫字段,最大可以存儲4G字節的非結構化數據。
主要介紹字符類型和二進制文件類型LOB數據的存儲,單獨介紹二進制類型LOB數據的存儲。
一,Oracle數據庫中的LOB數據類型分類
1,按存儲數據的類型分:
①字符類型:
CLOB:存儲大量 單字節 字符數據。
NLOB:存儲定寬 多字節 字符數據。
②二進制類型:
BLOB:存儲較大無結構的二進制數據。
③二進制文件類型:
BFILE:將二進制文件存儲在數據庫外部的操作系統文件中。存放文件路徑。
2,按存儲方式分:
①存儲在內部表空間:
CLOB,NLOB和BLOB
②指向外部操作系統文件:
BFILE
二,大對象數據的錄入
1,聲明LOB類型列
- /*
- conn scott/tiger;
- Create TableSpace ts5_21
- DataFile 'E:\Oracle\ts5_21.dbf'
- Size 5m;
- */
- Create Table tLob (
- no Number(4),
- name VarChar2(10),
- resume CLob,
- photo BLob,
- record BFile
- )
- Lob (resume,photo)Store As (
Tablespace ts5_21 --指定存儲的表空間
Chunk 6k --指定數據塊大小
- Disable Storage In Row
- );
2,插入大對象列
①先插入普通列數據
②遇到大對象列時,插入空白構造函數。
字符型:empty_clob(),empty_nclob()
二進制型:empty_blob()
二進制文件類型:BFileName函數指向外部文件。
BFileName函數:
BFileName(‘邏輯目錄名’,‘文件名’);
邏輯目錄名只能大寫,因為數據詞典是以大寫方式存儲。Oracle數據庫是區分大小寫的。
在創建時,無需將BFileName函數邏輯目錄指向物理路徑,使用時才做檢查二者是否關聯。
例子:
- Insert Into tLob Values(1,'Gene',empty_clob()
,empty_blob(),bfilename('MYDIR','IMG_0210.JPG'));
③將邏輯目錄和物理目錄關聯。(如果是二進制文件類型)
授予 CREATE ANY DIRECTORY 權限
Grant CREATE ANY DIRECTORY TO 用戶名 WITH ADMIN OPTION;
關聯邏輯目錄和物理目錄
本地
Create Directory 邏輯目錄名 As ‘文件的物理目錄’;
網絡:
Create Directory 邏輯目錄名 As ‘\\主機名(IP)\共享目錄’;
例子:
Create Directory MYDIR As 'E:\Oracle';
插入例子:
insert into tlob values(1,'Gene','CLOB大對象列
- ',empty_blob(),bfilename('MYDIR','IMG_0210.JPG'));