create table TESTLOB( ID INTEGER, CONTENT BLOB)
--创建序列
create sequence LOB_ID minvalue 1 maxvalue 99999999999999 start with 21 increment by 1 cache 20;
--插入数据
insert into testlob values(lob_id.nextval,utl_raw.cast_to_raw('我考'));
--查询数据
select id,utl_raw.cast_to_varchar2(content) from testlob;
--创建存储clob字段的路径的directory
create or replace directory “DATA_FILE” as 'd:\';--创建目录一定要将名称用双引号引起来
否则会报ora-22285错误:对不存在的目录或文件进行FILEOPEN操作
create or replace procedure insert_lob
/*
时间:2011-07-30
功能:从文件中读取数据到数据库中
*/
(
var_filename in varchar2--文件名
)
is
v_blob blob;
v_file bfile:=bfilename('data_file',var_filename);--文件名
v_errorstr varchar2(2000);
begin
insert into testlob (id, content1) values (LOB_ID.NEXTVAL, empty_blob())
returning content1 into v_blob;--插入数据
dbms_lob.fileopen(v_file);
dbms_lob.loadfromfile(v_blob,v_file,dbms_lob.getlength(v_file));--读取文件
dbms_lob.fileclose(v_file);
exception when others then
v_errorstr:=sqlerrm(sqlcode);
dbms_output.put_line(v_errorstr);
--commit;
end;
--oracle调用ufl.fremove来删除操作系统中的文件
utl_file.fremove('DATA_FILE','blob.txt');
注意data_file创建时必须用双引号引起来,而且调用时必须用大写。如果还是不对
在initsid.ora文件中,加入或修改
设置utl_file_dir的要点:
1。 utl_file_dir=* 这表示你能操作任何目录,尽量不要用
2。 utl_file_dir=d:\ 这表示你能操作d:\目录下的文件,但你不能操作d:\目录下的子目录
3。注意在设置
utl_file_dir=路径时,如果路径是长路径名,例如c:\my temp目录,则你必须加上'',例如:
utl_file_dir='c:\my temp'
4。utl_file_dir可以是多个路径
utl_file_dir=c:\,d:\,d:\temp,'c:\my temp'
5。设置完必须重新启动数据库
-- oracle调用utl_file.frename来对文件进行重命名
utl_file.frename('DATA_FILE','blob.txt','DATA_FILE','x.txt',TRUE);
--oracle调用utl_file.fcopy来对文件进行复制
utl_file.fcopy('DATA_FILE','x.txt','DATA_FILE','c_x.txt');