Oracle数据库字符串长度超过4000

勇敢的老散户 2015-09-09 01:41:01
最近二次开发一个项目,项目中从数据库多表中取值,通过触发器把这些值拼凑成一个varchar2类型的字符串,发现当数据量较大时字符串长度会超过4000,会报缓冲区内存不够错误。。
想过把触发器中varchar2类型改为blob或clob类型,发现还有很多以前的程序引用着这个触发器,不能改;想从源码循环拼凑数据,运行起来效率又会很慢很慢很慢。。。
怎么才能让缓冲区内存够用,求Oracle高手指点一二
...全文
5611 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_40454688 2018-11-26
  • 打赏
  • 举报
回复
我之前在写存储过程的时候碰到过这种情况,修改字符串的类型是不行的,因为改了类型之后虽然变量符合要求了,但sql语句的长度还是会超过4000,然后我就是将一个变量拆成三个,每个变量存500个左右的字符串,然后就解决问题了,不过这样做会导致系统性能下降,建议在交互不是太频繁的模块使用
小灰狼W 2015-09-10
  • 打赏
  • 举报
回复
要看触发器中怎么用,以及该值最后插入的字段的类型 错误信息应该是CHARACTER BUFFER too SMALL,只要将变量定义中的长度加大即可,pl/sql代码中的一个varchar2类型的变量,最长可以是32767 但如果该变量最终要插入到一个类型为varchar2的字段中,那么长度最长限制为4000,只能截取到4000字节以内或用clob
卖水果的net 2015-09-10
  • 打赏
  • 举报
回复
最好的办法,就是改成 CLOB 。 主要原因是: 你现在的长度不够用了,意味着你的业务数据是增加了(变长了),如果你要拆分成多个字段,你现原有程序,将读取不到完整的数据。
zbdzjx 2015-09-09
  • 打赏
  • 举报
回复
拼凑出这个字符串的用处? 要么建多个字符串,拼的时候,如果超过4000,剩余的放第2个字符串中,第2个字符串满了再放第3个字符串中……用的时候,将这几个字符串相加。
xu176032 2015-09-09
  • 打赏
  • 举报
回复
字符串最多长度那个是 oracle自定义的,不能改, 看你描述,可以考虑创建一个中间表,将需要查询的数据插入到中间表中,后续需要时候用的时候in一下这个中间表就可以了

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧