1. 程式人生 > >資料庫中的BLOB欄位--存圖片等檔案

資料庫中的BLOB欄位--存圖片等檔案

我們大家都知道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'));