oracle--导出、导入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.txt‘, ‘W‘);
 8   utl_file.PUT_RAW(file_handle , b_lob, true);
 9   UTL_FILE.FCLOSE(file_handle);
10 END;

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

 1 DECLARE
 2   b_file bfile;
 3   b_lob BLOB;
 4 BEGIN
 5   --return a into b_lob将该列与一个blog类型的变量绑定在一起,以后只要为b_lob赋值,即等于将该值插入了表中
 6   INSERT
 7   INTO SY_QRTZ_JOB_DETAILS
 8     (
 9       SCHED_NAME,
10       JOB_NAME,
11       JOB_GROUP,
12       DESCRIPTION,
13       JOB_CLASS_NAME,
14       IS_DURABLE,
15       IS_NONCONCURRENT,
16       IS_UPDATE_DATA,
17       REQUESTS_RECOVERY,
18       JOB_DATA
19     )
20     VALUES
21     (
22       ‘RhScheduler‘,
23       ‘test6‘,
24       ‘DEFAULT‘,
25       ‘test6‘,
26       ‘com.rh.core.icbc.imp.NImpStateJob‘,
27       ‘1‘,
28       ‘0‘,
29       ‘0‘,
30       ‘0‘,
31       empty_blob()
32     )
33     RETURN JOB_DATA
34   INTO b_lob;
35   --将文件转换为bfile
36   b_file := bfilename(‘UTL_FILE_DIR‘, ‘test.txt‘);
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;
时间: 2024-08-08 05:22:49

oracle--导出、导入blob类型的字段的相关文章

Oracle 导出导入数据

最近用到Oracle导出导入数据,在网上看了别人的一些文章,总结如下: Oracle导出导出有两中方式:一.利用exp imp导出导入:二.利用Oracel数据泵expdp impdp导出导入. 一.利用exp imp导出导入 exp imp 语法如下: exp: 1) 将数据库orcl完全导出 exp system/[email protected] file=d:\orcl_bak.dmp full=y 2) 将数据库中system用户的表导出 exp system/[email prote

Oracle导出导入指定表

从源数据库导出: exp user1/pwd@server1 file=c:\temp\exp.dmp tables=(table1, table2) 导入到目标数据库: imp user2/pwd@server2 file=c:\temp\exp.dmp tables=(table1, table2) Oracle就是有这个优点,能够直接将远程的数据导出到本地.或者将本地的数据文件导入到远程数据库. 而SQL SERVER的备份.还原文件,一定是放在远程服务器本机的. 补充一下,假设有很多表.

Oracle中的BLOB和CLOB字段类型的区别

1.BLOB是按二进制来存储的,而CLOB是可以直接存储文字的: 2.BLOB字段可以存储图片.文件和音乐等,而CLOB可以存储文章或较长文字的内容.

oracle导出导入数据库

一.给空表分配空间: 这一步一定要做,否则空表不能导出. 首先连接你要导出的库,在该库上执行以下sql: select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows = 0 执行结果是一连串的sql语句,类似alter table tablename allocate extent;选择所有结果,复制,在库里统一执行一下. 我在网上看好多人要在后面加一句 where num_rows

在JSP中获取oracle中的时间戳类型的字段并显示

在oracle中有一种特殊的时间显示类型——Timestamp时间戳 通常我们将当前时间转化为时间戳的语法如下: select cast (sysdate as timestamp ) from dual 在一个JSP页面中,需要获取一个时间戳字段,以显示在页面上 首先,是对JDBC的操作 sql语句用: select * from testlibrary 假设testlibrary中的modifydate字段的类型为TIMESTAMP(6) Testlibrary tlb= new Testl

Oracle导出导入

导出 exp 用户名/密码 file=文件名.dmp full=y; 导入 imp 用户名/密码 file=文件名.dmp full=y; 使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用. IMP只适用于EXP导出的文件,不适用于EXPDP导出文件:IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件. expdp或

Oracle导出导入表空间创建

//备份数据库前的sqlplus命令创建数据库dmp存入目录 sqlplus /nolog conn /as sysdba SQL> create or replace directory expdir as 'E:/Kxdb'; 目录已创建. cmd: // 导出数据库 expdp EMMS/EMMS123 directory=expdir dumpfile=EMMS2.dmp logfile=EMMS2.log // 导入dmp impdp EMMS/EMMS123 directory=ex

在同一个表中将varchar2类型的数据转存到blob类型的字段中

用一条修改语句即可:update t_content set f_body=rawtohex(f_check) where f_type in (0,4)此处须用rawtohex()函数将f_check转成16进制,不然会报ORA-01465: invalid hex number(ORA-01465:无效的十六进制数字)的错误.备注:f_body为blob型字段,f_check为varchar2型这时在页面取 f_body时直接用getString("f_body")即可.

[PL/SQL]oracle数据库的导出导入

一.PL/SQL Developer工具一般对oracle的导入导出有以下4中方式: 1.Oracle导出导入方式 这种方式导出导入为.dmp的文件格式,.dmp文件是二进制的,可以跨平台,还能包含权限,效率不错,用途最广.另外,该方式导出导入后,表结构和索引结构没有发生变化,而另外2种方式都会改变索引类型. 2.SQL插入方式 这种方式导出导入为.sql文件格式,可以用文本编辑器查看,通用性比较好,但效率不如第一种,适合小数据量导入导出.尤其注意的是表中不能有大字段(blob.clob.lon