日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 有empty_blob()_【原创】操作Blob类型的方法

發(fā)布時間:2023/12/15 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 有empty_blob()_【原创】操作Blob类型的方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

注:下列過程中的參數(shù)p_filename為外部文件名稱,p_name用于標(biāo)識唯一的一行

1.創(chuàng)建目錄utl_dir用于文件的導(dǎo)入、導(dǎo)出

create or replace directory utl_dir as 'd:\';

2.給所有用戶賦予讀寫utl_dir的權(quán)限

grant write,read on directory utl_dir to public;

3.創(chuàng)建測試表blob_test,其中列a為blob類型,b列在實際應(yīng)用中可以是表的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.將數(shù)據(jù)庫中的blob列導(dǎo)出為外部文件

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;

總結(jié)

以上是生活随笔為你收集整理的mysql 有empty_blob()_【原创】操作Blob类型的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。