【 伺服器學院】因為做專案,需要使用bfile欄位儲存影象檔案,所以進行了一些研究。
bfile欄位實際的檔案儲存在檔案系統中,欄位中儲存的是檔案定位指標.bfile對oracle來說是唯讀的,也不參與事務性控制和資料恢復
bfile的基本操作如下:
1.先在oracle資料庫中下面我們建立乙個目錄別名,用於將檔案定位指標對映到檔案系統:
create directory 'tmpdir' as '/tmp';
tmpdir表示邏輯目錄名,'/tmp'是實際目錄。 注意該目錄oracle應該有讀許可權
然後根據需要授權
grant read on directory bfile_dir1 to scott;
建立乙個含有bfile欄位的表
create table bfiletest(id number(3), fname bfile);
建立乙個含有blob欄位的表
create table blobtest(id number(3),ablob blob);
2.插入資料
這裡需要使用bfilename來進行bfile欄位的insert 或者 update操作
insert into bfiletest
values (1, bfilename ('tmpdir', 'tmptest'));
bfilename的引數1是directory名,引數2是檔名。注意:這一行中插入的是
乙個指向/tmp/tmptest的檔案定位指標對映,不是檔案本身。
3.讀取bfile
通過使用dbms_lob包進行可以對bfile讀入到blob/clob物件中操作(唯讀)
create or replace procedure loadlobfrombfile_proc(
tid in number,rfilename in varchar2,rfiledir in varchar2,upmessage out varchar2)
asdest_loc blob;
src_loc bfile;
begin
insert into blobtest(id,ablob) values(tid,empty_blob()) return ablob into dest_loc;
src_loc := bfilename(rfiledir,rfilename);
/* 如果bfile檔案實際存在 */
if (dbms_lob.fileexists(src_loc) != 0)
then
/* 開啟bfile原始檔 */
dbms_lob.open(src_loc, dbms_lob.lob_readonly);
/* 開啟目標blob: */
dbms_lob.open(dest_loc, dbms_lob.lob_readwrite);
/*從檔案中裝入 */
dbms_lob.loadfromfile(dest_loc, src_loc,dbms_lob.getlength(src_loc));
/* 記得關閉: */
dbms_lob.close(dest_loc);
dbms_lob.close(src_loc);
commit;
upmessage := '0';
end if;
exception
when others then
rollback;
upmessage := '操作失敗';
end;
原創 OCILIB操作bfile欄位
1 基於服務端 vs 基於客戶端 檔案的路徑都是相對於服務端目錄的路徑。2 如何建立乙個目錄物件?為了建立目錄,必須具有dba角色或者賦予了create any directory許可權。示例 window平台 connect system manager create or replace dir...
Oracle 中欄位屬性
oracle 中欄位屬性 說明 oracle的資料型別 oracle的資料型別 常用的資料庫字段型別如下 字段型別 中文說明 限制條件 其它說明 char 固定長度字串 最大長度2000 bytes varchar2 可變長度的字串 最大長度4000 bytes 可做索引的最大長度749 nchar...
oracle中clob欄位的使用
一 在hibernate.cfg.xml檔案中加乙個property屬性標籤 org.hibernate.dialect.oracle10gdialect oracle.jdbc.driver.oracledriver jdbc oracle thin 17 1 8.1.7 1521 orcl bb...