谈笑有鸿儒,往来无白丁

在恰当的时间、地点以恰当的方式表达给恰当的人...  阅读的时候请注意分类,佛曰我日里面是谈笑文章,其他是各个分类的文章,积极的热情投入到写博的队伍中来,支持blogjava做大做强!向dudu站长致敬>> > 我的微博敬请收听

第一日:

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错误;经过两天的努力发现的一个规律!

继续找原因。。。。。。

第二日
8月18日问题终于得到解决,但是存储过程和调用都经过了改变!

  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;

继续前进,看看原来的存储过程什么原因不可以!

总结:lob 文件4k以内的内容放到表段,其他的放到blob的表空间!
插入时,首先要插入empty_blob,然后select  for update!这样才能更新blob字段
另外如果是存储过程,则注意参数,想下面的一样:

  bblob out blob

这样才能得到blob字段的定位器;;;更新内容!

但是现在还不知道 bblob  in  blob 这种方式下如何修改,上传图片

第三天:
经过3天的努力寻找,终于找到了完美的解决方案居然就是一句话的问题,完全可以解决 in blob的问题了
TemporaryLobUpdate := True;
加一句就好了
到此在存储过程里面解决上传blob的问题解决完毕。
到此可以圆满结束,明天的合同就签了。
注意文章转载注明出处:http://blogjava.net/badboyryan

posted on 2007-08-17 01:36 坏男孩 阅读(4177) 评论(26)  编辑  收藏 所属分类: ORACLE篇章DELPHI

FeedBack:
# re: 通过存储过程来上传BLOG
2007-08-17 08:38 | i
"通过存储过程来上传BLOG",是“BLOB”吧?  回复  更多评论
  
# re: 通过存储过程来上传BLOB
2007-08-18 14:17 | Alpha

呵呵,没有遇到过这样的,没这样做过,没经验。。。

  回复  更多评论
  
# re: 通过存储过程来上传文件大于4kBLOB[未登录]
2007-10-23 13:35 | liu
请问
TemporaryLobUpdate := True;
是在什么地方设置的,怎么都找不到这个属性阿!
麻烦能给说一下吗,多谢了!
E-main:wxsan@163.com  回复  更多评论
  
# re: 通过存储过程来上传文件大于4kBLOB
2008-12-24 17:06 | df
汗,偶也不懂哦。。偶遇到了。是用Delphi。麻烦你发一份结局的东东给我吧。邮箱:mlb_1@163.com
谢谢。。非常感谢  回复  更多评论
  
# re: 通过存储过程来上传文件大于4kBLOB
2012-09-22 22:46 | SEO
建立数据表  回复  更多评论
  
# rock
2012-10-06 19:02 | slot machine gratis
。偶遇到了。是用Delphi。麻烦你发一份结局的东东给我吧。邮箱:mlb_1@163.com
谢谢。。非常感谢  回复  更多评论
  
# rock
2012-10-08 16:14 | slot machine gratis
偶遇到了。是用Delphi。麻烦你发一份结局的东东给我吧。邮箱:mlb_1@163.com
谢谢。  回复  更多评论
  
# rock
2012-10-08 18:58 | online casino
终于找到了完美的解决方案居然就是一句话的问题,完全可以解决 in blob的问题了  回复  更多评论
  
# rock
2012-10-15 19:14 | casinò online
麻烦你发一份结局的东东给我吧。邮箱  回复  更多评论
  
# poker gratis
2012-10-16 19:02 | poker gratis
是在什么地方设置的,怎么都找不到这个属性阿!
麻烦能给说一下吗,多谢了!   回复  更多评论
  
# rock
2012-10-16 19:27 | video poker gratis
美的解决方案居然就是一句话的问题,完全可以解  回复  更多评论
  
# re: 通过存储过程来上传文件大于4kBLOB
2012-11-24 11:38 | cheap beats by dre headphones
美的解决方案居然就是一句话的问题,完全可以解  回复  更多评论
  
# re: 通过存储过程来上传文件大于4kBLOB
2012-11-30 13:23 | Austin Home Builder
这位大哥,能把那四个工具给我发下不,找了挺长时间都没找着,很多链接都没法用了!我的邮箱  回复  更多评论
  
# re: 通过存储过程来上传文件大于4kBLOB
2012-12-22 13:22 | www.posicionamientoeficaz.net/
这位大哥,能把那四个工具给我发下不,找了挺长时间都没找着,很多链接都没法用了!我的邮箱  回复  更多评论
  
# rock
2012-12-27 15:34 | film streaming
终于找到了完美的解决方案居然就是一句话的问题,完全可以解决 in blob的问  回复  更多评论
  
# contaminacion por electromagnetismo bioelectrica
2013-01-25 17:38 | nitinkhare246@@gmail.com
그리고 품질이 매우 중요하다고 생각! 하지만 그 말을, 당신의 기사는 항상 팹을 읽을 수 있습니다., 좋은 일을 계속  回复  更多评论
  
# rock
2013-02-06 15:24 | http://www.google-seo-top.com/
这位大哥,能把那四个工具给我发下不,找了挺长时间都没找着,很多链接都没法用了!  回复  更多评论
  
# re: 通过存储过程来上传文件大于4kBLOB
2013-02-06 17:40 | alternador precio
这位大哥,能把那四个工具给我发下不,找了挺长时间都没找着,很多链接都没法用了  回复  更多评论
  
# re: 通过存储过程来上传文件大于4kBLOB
2013-02-18 05:34 | tiendas padel
상하게 생각한다며 “런더너는 소속감을 느끼기 위해서라도 정원이 필요하다”고 말합니다. 문화인류학자 케이트 폭스도 동의하죠. “영국인은 자신만의 조그만 상자 안에서 자신만의 초록색 조각을 가지고 살기 원한다”고. 그래서인지 아직도 거의 70퍼센트의 영국인이 주택에 살며, 정원을 가꿉니다. 이론의 여지가 있지만, 정원을 주인의 지성, 사회적 지위, 라이프 스타일, 예술 감각을 뽐내는 무대로 여기기도 합니다.  回复  更多评论
  
# re: 通过存储过程来上传文件大于4kBLOB
2013-03-01 17:27 | servicio inmobiliario madrid
感谢您的分享您的想法!我将不胜感激,但如果你想更详细的问题,因为我觉得缺了点什么,在这里和那里。  回复  更多评论
  
# re: 通过存储过程来上传文件大于4kBLOB
2013-05-22 09:29 | jual jilbab murah
这位大哥,能把那四个工具给我发下不,找了挺长时间都没找着,很多链接都没法用了!我的邮箱  回复  更多评论
  
# presentation templates
2013-06-17 04:23 | honey3370@gmail.com
해병대에 있는 현빈을 이렇게라도 만나보면 조금 위안이 될 것 같죠?ㅎㅎ 좋은 하루 보내세요
  回复  更多评论
  
# re: 通过存储过程来上传文件大于4kBLOB
2013-06-20 17:30 | uk essays
偶遇到了。是用Delphi。麻烦你发一份结局的东东给我吧。  回复  更多评论
  
# re: 通过存储过程来上传文件大于4kBLOB
2013-08-08 18:12 | Clipping Path
대에 있는 현빈을 이렇게라도 만나보면 조금 위안이 될 것 같죠?ㅎㅎ 좋은 하루 보내세요  回复  更多评论
  
# re: 通过存储过程来上传文件大于4kBLOB
2013-11-22 00:47 | toko sepatu online
谢谢你的每一个其他的信息网站。  回复  更多评论
  
# my site
2014-01-11 00:22 | toko sepatu terpercaya
首先,对你的写作成绩表示祝贺。谢谢您的分享这些信息的口齿方式。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问