1.建立数据表
create table aaa(id varchar2(9) not null,img blob);
2.存储过程
create or replace procedure pro_upd(
sid in string,
bblob in blob default empty_blob())
is
lobloc blob;
vLength integer;
begin
insert into aaa(id,img) values(sid,empty_blob());
IF (bblob IS NOT NULL) THEN
SELECT img INTO lobloc FROM aaa WHERE ID = sid FOR UPDATE;
vLength := dbms_lob.getlength(bblob);
DBMS_LOB.OPEN(lobloc,DBMS_LOB.lob_readwrite);
DBMS_LOB.copy(lobloc,bblob,vLength);
END IF;
commit;
exception
when others then
rollback;
end;
3.程序代码
用的ODAC的oraquery
orqry1.SQL.Text := 'call pro_upd(:id,:bblob)';
orqry1.Params.ParamByName('id').Value := '123';
orqry1.Params.ParamByName('bblob').LoadFromFile('D:\work\照片上传\pic\005.jpg',ftBlob);
orqry1.ExecSQL;
目的:就是把图片上传到数据库,结果4k一下的可以成功上传;4k以上稍小点的图片就 ORA-03113: 通信通道的文件结束如果几百k就会报ora-12571错误;经过两天的努力发现的一个规律!
继续找原因。。。。。。
create table aaa(id varchar2(9) not null,img blob);
2.存储过程
create or replace procedure pro_upd(
sid in string,
bblob in blob default empty_blob())
is
lobloc blob;
vLength integer;
begin
insert into aaa(id,img) values(sid,empty_blob());
IF (bblob IS NOT NULL) THEN
SELECT img INTO lobloc FROM aaa WHERE ID = sid FOR UPDATE;
vLength := dbms_lob.getlength(bblob);
DBMS_LOB.OPEN(lobloc,DBMS_LOB.lob_readwrite);
DBMS_LOB.copy(lobloc,bblob,vLength);
END IF;
commit;
exception
when others then
rollback;
end;
3.程序代码
用的ODAC的oraquery
orqry1.SQL.Text := 'call pro_upd(:id,:bblob)';
orqry1.Params.ParamByName('id').Value := '123';
orqry1.Params.ParamByName('bblob').LoadFromFile('D:\work\照片上传\pic\005.jpg',ftBlob);
orqry1.ExecSQL;
目的:就是把图片上传到数据库,结果4k一下的可以成功上传;4k以上稍小点的图片就 ORA-03113: 通信通道的文件结束如果几百k就会报ora-12571错误;经过两天的努力发现的一个规律!
继续找原因。。。。。。
![137430.html](https://i-blog.csdnimg.cn/blog_migrate/eb9b205f16ff48ff4f7730a9d1931e09.jpeg)