第一日:
1.建立數(shù)據(jù)表
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;?
目的:就是把圖片上傳到數(shù)據(jù)庫,結(jié)果4k一下的可以成功上傳;4k以上稍小點的圖片就ORA-03113: 通信通道的文件結(jié)束如果幾百k就會報ora-12571錯誤;經(jīng)過兩天的努力發(fā)現(xiàn)的一個規(guī)律!
繼續(xù)找原因。。。。。。
第二日
8月18日問題終于得到解決,但是存儲過程和調(diào)用都經(jīng)過了改變!
? with orstrdprc1 do begin
??? StoredProcName := 'pro_upd';
??? PrepareSQL;? // receive parameters
??? Randomize;
??? ParamByName('SID').AsString := IntToStr(Random(1000));
??? ParamByName('bblob').ParamType := ptInput;? // to transfer Lob data to Oracle
??? ParamByName('bblob').AsOraBlob.LoadFromFile('D:\work\照片上傳\pic\10000027_005.jpg');
??? Execute;
? end;
這樣可以了,但是要求
--這個存儲過程得到了解決
create or replace procedure pro_upd(
? sid in string,
? bblob out blob)
is
begin??
? insert into aaa(id,img) values(sid,empty_blob())
? RETURNING img INTO bblob;
end;
繼續(xù)前進,看看原來的存儲過程什么原因不可以!
總結(jié):lob 文件4k以內(nèi)的內(nèi)容放到表段,其他的放到blob的表空間!
插入時,首先要插入empty_blob,然后select? for update!這樣才能更新blob字段
另外如果是存儲過程,則注意參數(shù),想下面的一樣:
? bblob out blob
這樣才能得到blob字段的定位器;;;更新內(nèi)容!
但是現(xiàn)在還不知道?bblob? in? blob 這種方式下如何修改,上傳圖片
第三天:
經(jīng)過3天的努力尋找,終于找到了完美的解決方案居然就是一句話的問題,完全可以解決?in blob的問題了
TemporaryLobUpdate := True;
加一句就好了
到此在存儲過程里面解決上傳blob的問題解決完畢。
到此可以圓滿結(jié)束,明天的合同就簽了。
注意文章轉(zhuǎn)載注明出處:http://blogjava.net/badboyryan
posted on 2007-08-17 01:36
壞男孩 閱讀(4195)
評論(26) 編輯 收藏 所屬分類:
ORACLE篇章 、
DELPHI