Oracle Blob数据保存为文件

好久不写文,最近得空写一点。Oracle数据库国内用户量主要在企业上,其中有一种byte的存储称为Blob,并不能直接看。

有时候为了调试需要,可以通过:

select UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(xxx,2000,1)) from xxx where xxx = 9667796;

这种sql去转为字符串查看,但是不方便,一次最多转出2000个字节。需要通过index拼成完整的文本。

另外一种情况下,如果存储的是图片、word或其它非文本格式的二进制文档时,就没办法通过上面的方法进行查看了。我这里介绍一种方式可以把Blob保存到数据库服务器所在机器的本地磁盘中去。

存储过程:

 1 CREATE OR REPLACE
 2 PROCEDURE SaveBlob(filename VARCHAR)
 3 AS
 4     v_lob_loc      BLOB;
 5     v_buffer       RAW(32767);
 6     v_buffer_size  BINARY_INTEGER;
 7     v_amount       BINARY_INTEGER;
 8     v_offset       NUMBER(38) := 1;
 9     v_chunksize    INTEGER;
10     v_out_file     UTL_FILE.FILE_TYPE;
11
12 BEGIN
13     -- 查询条件(此处根据需求修改)
14     SELECT  content
15     INTO    v_lob_loc
16     FROM    obj_code_file
17     WHERE   id = 9667793;
18
19     -- 大小
20     v_chunksize := DBMS_LOB.GETCHUNKSIZE(v_lob_loc);
21     IF (v_chunksize < 32767) THEN
22         v_buffer_size := v_chunksize;
23     ELSE
24         v_buffer_size := 32767;
25     END IF;
26     v_amount := v_buffer_size;
27
28     -- 打开
29     DBMS_LOB.OPEN(v_lob_loc, DBMS_LOB.LOB_READONLY);
30
31     -- 写入
32     v_out_file := UTL_FILE.FOPEN(
33         location      => ‘EXPDP_DIR‘,
34         filename      => filename,
35         open_mode     => ‘wb‘,
36         max_linesize  => 32767);
37
38     WHILE v_amount >= v_buffer_size
39     LOOP
40       DBMS_LOB.READ(
41           lob_loc    => v_lob_loc,
42           amount     => v_amount,
43           offset     => v_offset,
44           buffer     => v_buffer);
45       v_offset := v_offset + v_amount;
46       UTL_FILE.PUT_RAW (
47           file      => v_out_file,
48           buffer    => v_buffer,
49           autoflush => true);
50       UTL_FILE.FFLUSH(file => v_out_file);
51     END LOOP;
52     UTL_FILE.FFLUSH(file => v_out_file);
53     UTL_FILE.FCLOSE(v_out_file);
54
55     -- 关闭文件
56     DBMS_LOB.CLOSE(v_lob_loc);
57 END;

把存储过程导入到Oracle中,通过SaveBlob()来调用,参数是要保存的文件名。保存的目录在‘EXPDP_DIR‘中,通过:

select * from ALL_DIRECTORIES;

可以查看此目录对应的物理路径。

执行完存储过程后,就可以看到导出后的二进制文件了。

转载请注明原址:http://www.cnblogs.com/lekko/p/5624748.html

时间: 2024-10-03 21:53:21

Oracle Blob数据保存为文件的相关文章

Android数据保存之文件保存

前言: 上一篇文章写了在Android中利用SharedPreferences保存数据,SharedPreferences在保存数据的时候主要是保存一些应用程序的设置信息或者少量的用户信息,而且是以key-value形式保存的String类的信息,比較有局限性. 比方你须要保存从网络获取的图片到本地作为缓存数据,而且数量比較大.SharedPreferences就不能满足你的需求了,这个时候就要用到基本上全部平台都会用到的文件保存. Android中以文件形式把数据保存到磁盘上与其它平台基本上都

oracle学习之数据库数据保存成文件

常常需要将数据库中的数据生成文档,由于比较喜欢脚本的方式,所以就需要使用spool的时候进行格式设置,以下简单整理了一下oracle中进行格式设置的一些东西,一共十八条,其实常用的也就那么几个,稍后会附上自己写的简单的shell操作的脚本,希望能供同样有需要的共同交流,也作为自己的备份. set命令的各项及其含义:arraysize 从数据库中一次提取的行数,默认为15autocommit 是否自动提交,默认为offcolsep 在选定列之间的分隔符,默认为空格echo 在用start命令执行一

work01-2 三级菜单(数据保存在文件中)

json f(,  ) ChinaMap json.load(f) welcome_msg end_msg .center(,) menu_one .center(,) menu_two .center(,) menu_three .center(,) menu_select ()province_dict     province     area_list []     i ChinaMapi (i.keys())area_list.append(i[])     (menu_one)   

MATLAB 生成数据保存至文件

% load pyrim % NumTrain = 50; % load machine %NumTrain = 150; % load housing % NumTrain = 300; % load abalone % NumTrain = 1000; % load bank32nh % NumTrain = 3000; % load cpuact % NumTrain = 4000; % load calhousing % NumTrain = 5000; % load census %

Android 数据保存

Android数据保存方法 android数据保存主要保存以下三种: 1.共享参数文件中保存简单的键值对数据: 2.保存任意的文件数据到Android的文件系统中: 3.使用SQLite数据库管理 保存键值集 通过使用SharePreferences API来保存简单的键值对数据. 共享参数文件的获取或创建: 可以通过以下两种方法来获取: getSharedPreferences()  该方法需要提供一个共享参数文件的名称标识,该方法可以在任意Context中调用 getPreferences(

【应用】:shell crontab定时生成oracle表的数据到txt文件,并上传到ftp

一.本人环境描述      1.oracle服务端装在win7 32位上,oracle版本为10.2.0.1.0      2.Linux为centos6.5 32位,安装在Oracle VM VirtualBox虚拟机上      3.win7上装有ftp服务 二.功能实现描述      用shell的crontab命令定时执行某个.sh文件,此文件的功能已实现生成oracle表的数据到本地txt文件,并上传到ftp,必要时可记录执行日志. 三.步骤      1.在centos中安装orac

oracle rename数据文件的两种方法

oracle rename数据文件的两种方法 2012-12-11 20:44 10925人阅读 评论(0) 收藏 举报  分类: oracle(98)  版权声明:本文为博主原创文章,未经博主允许不得转载. 第一种 alter tablespace users rename datafile '==' to '***'; 这种方式需要数据库处于open状态,表空间在offline的状态下才能更改. [sql] view plain copy SQL> alter tablespace user

oracle移动数据/修改数据文件路径

参考:http://wwyz998.blog.163.com/blog/static/321867852011117111832334/ oracle移动数据文件 1.连接到数据库 [[email protected]]$ ./sqlplus /nolog SQL> conn / as sysdba 2. 查看数据文件位置 SQL> select file_name from sys.dba_data_files; 或 SQL> select name from v$datafile;

Android开发学习---android下的数据持久化,保存数据到rom文件,android_data目录下文件访问的权限控制

一.需求 做一个类似QQ登录似的app,将数据写到ROM文件里,并对数据进行回显. 二.截图 登录界面: 文件浏览器,查看文件的保存路径:/data/data/com.amos.datasave/files/LoginTest.txt------/data/data/(包名)/files/(文件名) 导出的文件内容: 三.实现代码 新建一个Android 工程.这里我选择的是2.1即API 7,进行开发的,其它都是默认下一步下一步即可. /datasave/res/layout/activity