1 --创建有大对象字段的一张表
2 create table test001
3 (
4 fname
varchar2(
50),
5 content blob
6 )
7
8 select * from dba_users;
9
10 select * from test001
11
12 --(一)..准备插入大对象
13 --1. 创建文件存放目录(让Oracle管理,该目录)
14 create or replace directory test_dir
15 as
16 'e:\Pictures';
17
18 --2.可以将该目录授权给其他用户访问
19 grant read,write
on directory test_dir
to scott;
20
21 --(二).准备将大对象,存放在test001表中
22 declare
23 tempimg blob;
--定义临时变量存放数据
24 tempdir bfile :
= bfilename(
'TEST_DIR',
'Azul.jpg');
--非常重要:所有数据都是大写存放的
25 begin
26 insert into test001
values (
'first.jpg',empty_blob()) returning content
into tempimg;
27
28 --使用内置的包,给tempimg写入数据
29 dbms_lob.fileopen(tempdir);
--打开指定文件
30 dbms_lob.loadfromfile(tempimg,tempdir,dbms_lob.getlength(tempdir));
31 dbms_lob.fileclose(tempdir);
--关闭文件
32
33 dbms_output.put_line(
'恭喜你,终于成功了!!!');
34
35 commit;
36 end ;
37
38 select * from test001
39
40 select * from dba_directories
41
42
43 --将Blob对象,写成磁盘文件
44 declare
45 l_file utl_file.file_type;
--定义写入磁盘文件的类型和格式
46 l_buffer
raw(
32767);
--定义缓冲区大小
47 l_amount binary_integer :
= 3276;
--每次位移个数
48 l_pos
int :
=1;
--开始位置
49 l_blob blob;
--临时数据存放
50 l_blob_len
int;
--总长度
51 begin
52 select content
into l_blob
from test001;
--将数据库中的数据,存放在blob变量中
53
54 --获取blob文件的长度
55 l_blob_len :
= dbms_lob.getlength(l_blob);
56
57 --准备写入磁盘文件
58 l_file :
= utl_file.fopen(
'TEST_DIR',
'HHAHAHAHAHAHAHAHAAHA.JPG',
'wb');
59
60 --写入数据
61 while l_pos
<l_blob_len loop
62 dbms_lob.
read(l_blob,l_amount,l_pos,l_buffer);
63 utl_file.put_raw(l_file,l_buffer,true);
64 l_pos :
= l_pos
+ l_amount;
65 end loop;
66
67 utl_file.fclose(l_file);
68 dbms_output.put_line(
'恭喜,恭喜。。。。文件写成功!');
69 end;
70
71
72 /*
73 文本大对象的写入和读取(clob)。
74 */
75 --写入文本文件第一种方式
76 declare
77 tempimg clob;
--定义临时变量存放数据
78 tempdir bfile :
= bfilename(
'TEST_DIR',
'DIV3.html');
--非常重要:所有数据都是大写存放的
79 amount
int:
=dbms_lob.getlength(tempdir);
80 src_offset
int:
=1;
81 dest_offset
int:
=1;
82 csid
int:
=0;
83 lc
int:
=0;
84 warning
int;
85 begin
86 insert into test002
values (
'第四个文本文件',empty_clob()) returning content
into tempimg;
87
88 --使用内置的包,给tempimg写入数据
89 dbms_lob.fileopen(tempdir);
--打开指定文件
90
91 dbms_lob.loadclobfromfile(tempimg,tempdir,amount,dest_offset,src_offset,csid,lc,warning);
92
93 dbms_lob.fileclose(tempdir);
--关闭文件
94
95 dbms_output.put_line(
'恭喜你,终于成功了!!!');
96
97 commit;
98 end ;
99
100 --写入文本文件第二种方式(通过异常判断文件结束的)
101 declare
102 filecontent clob;
103 input_file utl_file.file_type;
104 buffer
varchar2(
2000);
105 l_pos
int :
= 1;
106 amount
int;
107 begin
108 insert into test002
values (
'第二个文本数据',empty_clob()) returning content
into filecontent;
109 --打开磁盘文件
110 input_file :
= utl_file.fopen(
'TEST_DIR',
'DIV3.html',
'r');
111
112 loop
113 utl_file.get_line(input_file,buffer);
114
115 --获取每次读取的长度
116 amount:
=length(buffer);
--每次写入的字符长度
117
118 exit when amount
<=0;
119
120 dbms_lob.write(filecontent,amount,l_pos,buffer);
121
122 l_pos:
=l_pos
+amount;
123
124 end loop;
125
126 utl_file.fclose(input_file);
127
128 dbms_output.put_line(
'文件写入完毕!');
129
130 exception
131 when no_data_found
then
132 dbms_output.put_line(
'数据已经读取完毕了!');
133 utl_file.fclose(input_file);
134 end;
135
136
137 select * from test002
138
139
140
141
142 --读取表中的数据,到文件
143 declare
144 src clob;
145 outfile utl_file.file_type;
146 length
integer;
147 buffer
varchar2(
8000);
148 begin
149 select content
into src
from test002
where fname
='第四个文本文件';
150
151 length :
= dbms_lob.getlength(src);
152
153 dbms_lob.
read(src,length,
1,buffer);
154
155 --打开磁盘文件
156 outfile :
= utl_file.fopen(
'TEST_DIR',
'hahahahhahahahah.html',
'w',
8000);
157
158 utl_file.put(outfile,buffer);
--写入数据
159
160 utl_file.fclose(outfile);
--关闭指针
161
162 dbms_output.put_line(
'文件已经写入完毕!');
163 end;
转载于:https://www.cnblogs.com/huzi007/archive/2013/01/24/2874507.html
相关资源:垃圾分类数据集及代码