操作Blob型別的方法(zt)
注:下列過程中的引數p_filename為外部檔名稱,p_name用於標識唯一的一行
1.建立目錄utl_dir用於檔案的匯入、匯出
create or replace directory utl_dir as 'd:';
2.給所有使用者賦予讀寫utl_dir的許可權
grant write,read on directory utl_dir to public;
3.建立測試表blob_test,其中列a為blob型別,b列在實際應用中可以是表的PK列
create table blob_test(a blob,b number);
4.將外部檔案插入blob列
CREATE OR REPLACE PROCEDURE insert_blob(p_name varchar2,p_filename varchar2) IS
i_blob BLOB;
i_file BFILE := BFILENAME('UTL_DIR',p_filename);
BEGIN
INSERT INTO blob_test VALUES (EMPTY_BLOB(),p_name)
RETURNING test INTO i_blob;
DBMS_LOB.FILEOPEN(i_file);
DBMS_LOB.LOADFROMFILE(i_blob, i_file, DBMS_LOB.GETLENGTH(i_file));
DBMS_LOB.FILECLOSE(i_file);
COMMIT;
END;
5.用外部檔案更新blob列
CREATE OR REPLACE PROCEDURE update_blob(p_name varchar2,p_filename varchar2) IS
i_blob BLOB;
i_file BFILE := BFILENAME('UTL_DIR',p_filename);
BEGIN
UPDATE blob_test SET test = EMPTY_BLOB() WHERE b = p_name
RETURNING test INTO i_blob;
DBMS_LOB.FILEOPEN(i_file);
DBMS_LOB.LOADFROMFILE(i_blob, i_file, DBMS_LOB.GETLENGTH(i_file));
DBMS_LOB.FILECLOSE(i_file);
COMMIT;
END;
6.用於檢視insert、update是否成功的語句
SELECT DBMS_LOB.GETLENGTH(test) FROM blob_test;
7.將資料庫中的blob列匯出為外部檔案
CREATE OR REPLACE PROCEDURE dump_blob (p_name varchar2,p_filename varchar2) IS
l_file UTL_FILE.FILE_TYPE;
l_buffer RAW(32767);
l_amount BINARY_INTEGER := 32767;
l_pos INTEGER := 1;
l_blob BLOB;
l_blob_len INTEGER;
BEGIN
SELECT test INTO l_blob FROM blob_test WHERE b = p_name;
l_blob_len := DBMS_LOB.GETLENGTH(l_blob);
l_file := UTL_FILE.FOPEN('UTL_DIR',p_filename,'wb', 32767);
WHILE l_pos < l_blob_len LOOP
DBMS_LOB.READ (l_blob, l_amount, l_pos, l_buffer);
UTL_FILE.PUT_RAW(l_file, l_buffer, TRUE);
l_pos := l_pos + l_amount;
END LOOP;
UTL_FILE.FCLOSE(l_file);
EXCEPTION
WHEN OTHERS THEN
IF UTL_FILE.IS_OPEN(l_file) THEN
UTL_FILE.FCLOSE(l_file);
END IF;
RAISE;
END;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/271283/viewspace-1004677/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP 操作 mysql blob 資料型別的欄位PHPMySql資料型別
- GBase8s BLOB型別使用操作示例型別
- Mysql BLOB、BLOB與TEXT區別及效能影響、將BLOB型別轉換成VARCHAR型別MySql型別
- JS操作二進位制方法 - blobJS
- MySQL中TEXT與BLOB欄位型別的區別MySql型別
- JDBC 處理CLob和Blob型別資料JDBC型別
- Oracle BLOB型別的資料如何檢視和下載?Oracle型別
- MySQL 中 blob 和 text 資料型別詳解MySql資料型別
- Redis(二) 資料型別操作指令以及對應的RedisTemplate方法Redis資料型別
- 操作型別之字串型別字串
- Oracle blob型別資料轉換成 base64編碼Oracle型別
- 原子操作與原子型別型別
- 通過配置hibernate方言包+GBase8s jdbc實現clob、blob、text、byte大物件資料型別操作JDBC物件資料型別
- Lazarus中對mysql資料庫Blob型別進行讀寫例子MySql資料庫型別
- (四)Python中的字串型別及操作Python字串型別
- Java mysql blob 資料讀寫操作JavaMySql
- java基本型別和包裝型別的“==”和equals()方法Java型別
- PHP類方法的型別提示PHP型別
- 【ASP.NET Core】MVC操作方法如何繫結Stream型別的引數ASP.NETMVC型別
- Redis資料型別基本操作Redis資料型別
- MySQL JSON資料型別操作MySqlJSON資料型別
- Redis 資料型別及操作Redis資料型別
- C++ string型別常用操作C++型別
- Redis 基本資料型別(Set) 的操作命令Redis資料型別
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元
- Go: 指標方法與值方法<->指標型別與值型別Go指標型別
- trait 和型別的方法同名的例子AI型別
- 例項操作mysql varchar型別求和MySql型別
- dart基礎之變數資料型別操作符方法異常Dart變數資料型別
- JavaScript強制型別轉換的背後操作JavaScript型別
- JS 裡的資料型別及幾個操作JS資料型別
- JS中其他資料型別轉為number資料型別的方法JS資料型別
- go 方法接受者 是指標型別和非指標型別的 區別Go指標型別
- 截圖識別的具體操作方法
- [轉載] python複數型別-Python 複數屬性和方法操作例項Python型別
- mysql表操作(alter)/mysql欄位型別MySql型別
- JS 基礎型別之裝箱操作JS型別
- task03 資料型別和操作資料型別
- MySQL資料型別操作(char與varchar)MySql資料型別