操作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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【原創】操作Blob型別的方法型別
- PHP 操作 mysql blob 資料型別的欄位PHPMySql資料型別
- mysql BLOB型別 TEXT型別MySql型別
- GBase8s BLOB型別使用操作示例型別
- Mysql BLOB、BLOB與TEXT區別及效能影響、將BLOB型別轉換成VARCHAR型別MySql型別
- oracle對BLOB型別資料的操作與效能問題(轉載)Oracle型別
- SQL Server資料型別BLOBSQLServer資料型別
- BLOB(二進位制大物件:text、ntext或image)型別資料的操作物件型別
- MySQL中TEXT與BLOB欄位型別的區別MySql型別
- JS操作二進位制方法 - blobJS
- 淺析NAT的型別-ZT型別
- sql mode 型別(ZT)SQL型別
- JDBC 處理CLob和Blob型別資料JDBC型別
- Oracle 中LONG RAW BLOB CLOB型別介紹Oracle型別
- 檔案插入 Oracle資料庫 Blob型別Oracle資料庫型別
- Oracle BLOB型別的資料如何檢視和下載?Oracle型別
- MySQL 中 blob 和 text 資料型別詳解MySql資料型別
- C#.NET 中的型別轉換 ztC#型別
- 操作LONG型別型別
- varchar or blob:欄位型別的儲存和溢位條件型別
- 測試移動blob型別的資料到新的表空間型別
- zt_ora-600內部錯誤的型別型別
- BLOB和CLOB的區別以及在ORALCE中的插入和查詢操作
- Redis(二) 資料型別操作指令以及對應的RedisTemplate方法Redis資料型別
- 操作型別之字串型別字串
- Python 操作 Azure Blob StoragePython
- Hibernate Blob 操作問題!
- Oracle插入Blob資料的方法Oracle
- zt_oracle lock type鎖型別詳解Oracle型別
- Oracle blob型別資料轉換成 base64編碼Oracle型別
- 原子操作與原子型別型別
- java基本型別和包裝型別的“==”和equals()方法Java型別
- PHP類方法的型別提示PHP型別
- Scala 泛型型別和方法泛型型別
- Lazarus中對mysql資料庫Blob型別進行讀寫例子MySql資料庫型別
- 一個從事資料庫遷移的老手的的筆記之一(Oracle對BLOB型別資料的操作與效能問題)資料庫筆記Oracle型別
- Java mysql blob 資料讀寫操作JavaMySql
- 主流資料庫欄位型別轉.Net型別的方法資料庫型別