加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle--导出、导入blob类型的字段

发布时间:2020-12-12 14:01:57 所属栏目:百科 来源:网络整理
导读:blob是oracle中的一个数据类型,保存的是压缩后的二进制形式的大数据。 数据迁移如果涉及到blob字段,都不好处理,因为无法用常规方法进行操作,如:使用select查看该字段,也无法用insert插入该字段的值。 以下记录了blob字段的导出、导入方法流程。 方法原

blob是oracle中的一个数据类型,保存的是压缩后的二进制形式的大数据。

数据迁移如果涉及到blob字段,都不好处理,因为无法用常规方法进行操作,如:使用select查看该字段,也无法用insert插入该字段的值。

以下记录了blob字段的导出、导入方法流程。

方法原理:利用UTL_FILE将blob字段的内容以二进制的形式导出到txt文档,然后用dbms_blob将文档内容导入到指定的数据库表中

1、创建一个文本文档来保存blob数据

这里在home目录下创建了一个名为test.txt的文件,即/home/dhl/test.txt

2、创建oracle临时目录

create or replace directory UTL_FILE_DIR as '/home/dhl/';

3、导出blob数据

这里以SY_QRTZ_JOB_DETAILS这张数据表为例子,其中的JOB_DATA就是blob类型的字段

 1 DECLARE
 2   file_handle UTL_FILE.FILE_TYPE;
 3   b_lob BLOB;
 4 BEGIN
 5   select JOB_DATA into b_lob from SY_QRTZ_JOB_DETAILS  where JOB_NAME=2WNfkfZZ14YUodhnYOfEzbl';
 6 
 7   file_handle := utl_file.fopen(UTL_FILE_DIR',test.txtW');  
 8   utl_file.PUT_RAW(file_handle,b_lob,true);  
 9   UTL_FILE.FCLOSE(file_handle);
10 END;

4、将文档内容导入到指定的数据库表中

 2   b_file bfile;
--return a into b_lob将该列与一个blog类型的变量绑定在一起,以后只要为b_lob赋值,即等于将该值插入了表中
 6   INSERT
 7   INTO SY_QRTZ_JOB_DETAILS
 8     (
 9       SCHED_NAME,10       JOB_NAME,128);line-height:1.5;">11       JOB_GROUP,128);line-height:1.5;">12       DESCRIPTION,128);line-height:1.5;">13       JOB_CLASS_NAME,128);line-height:1.5;">14       IS_DURABLE,128);line-height:1.5;">15       IS_NONCONCURRENT,128);line-height:1.5;">16       IS_UPDATE_DATA,128);line-height:1.5;">17       REQUESTS_RECOVERY,128);line-height:1.5;">18       JOB_DATA
19     )
20     VALUES
21     (
22       RhScheduler',128);line-height:1.5;">23       test624       DEFAULT25       26       com.rh.core.icbc.imp.NImpStateJob27       128       029       30       31       empty_blob()
32     )
33     RETURN JOB_DATA
34   INTO b_lob;
35   将文件转换为bfile
36   b_file := bfilename(');
37   dbms_lob.open(b_file,dbms_lob.file_readonly);
38    将b_file中的内容转换到b_lob
39   dbms_lob.loadfromfile(b_lob,b_file,dbms_lob.getlength(b_file));
40   dbms_lob.close(b_file);
41   COMMIT;
42 END;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读