如何修改和刪除bfile類型的數據
2024-07-21 02:33:34
供稿:網友
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); 2.插入數據
這里需要使用bfilename來進行bfile字段的insert 或者 update操作
[code:1:bb5d3f600c]
INSERT INTO bfiletest
VALUES (1, BFILENAME ('tmpdir', 'tmptest'));
[/code:1:bb5d3f600c]
bfilename的參數1是DIRECTORY名,參數2是文件名。注重:這一行中插入的是 一個指向/tmp/tmptest的文件定位指針映射,不是文件本身。 3.讀取bfile
通過使用dbms_lob包進行可以對bfile讀入到blob/clob對象中操作(只讀)
[code:1:bb5d3f600c]
CREATE OR REPLACE PROCEDURE loadLOBFromBFILE_proc IS
Dest_loc BLOB;
Src_loc BFILE := BFILENAME('tmpdir', 'tmptest'); BEGIN
SELECT blob_col INTO Dest_loc FROM aBLOBTable
WHERE ID= 111
FOR UPDATE; /* 假如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;
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Operation failed'); END;
[/code:1:bb5d3f600c] 會話能打開多少個文件有init參數session_MAX_OPEN_FILES決定
文件大小由OS決定, 32位的文件系統為每個文件2gb或4gb