为什么大于32k的数据就不行?

通过一个存储过程上送文件到BLOB字段.原来测试都没有问题,今天换了几个不同类型的文件.问题就浮现出来了:"ORA-01460: 转换请求无法实现或不合理".上网查了查,原因就是使用存储过程直接传入BLOB字段是有大小限制的,这个限制就是32k.解决方法是可以调数据库参数.或者用dataset来处理.原来也做过文件上传BLOB.用的就是dataset,根本没有这个问题.测试的时候100多m的文件都可以上去.真不知道为什么用了存储过程反而有这个问题.

 

请教了几个经常用oracle的同学.现在用存储过程大致上是这样解决的:使用oralce自带的函数

f_lob:=bfilename('DIR_NAME', 'ss.bmp');
--打开文件对象
dbms_lob.fileopen(f_lob,dbms_lob.file_readonly);
--把文件对象写入Blob数据中
dbms_lob.loadfromfile(b_lob,f_lob,dbms_lob.getlength(f_lob));
dbms_lob.fileclose(f_lob);

 

实际上还是有些问题

'DIR_NAME'是一个文件目录的别名,要使用'create or replace directory dir_name as ''d:/temp/'''来预先定义,而且这个文件还要存在,此外'DIR_NAME'这个别名还不能超过30个字符.不然又要报错(灵活性太小了....).最要命的是因为上面的原因,文件必须放到安装了oracle的服务器上去才能上送.如果是远程使用oracle数据问题就麻烦了.如果直接能传递大于32k的数据多好,就没有那么多麻烦事了

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值