oracle update or insert 字段数据量过长

在开发中遇到了一个问题,就是我需要插入 或更新一条数据,如:
update blog set content='11111111111111111...' where id = 1
这时候这个content数据长度是很大的,可以是几千上万个字符, 这时候执行这个sql语句就会出问题,

oracle sql ORA-01704: string literal too long

oracle 数据oracle 的sql 解析器无法直接处理怎么长的数据(mysql可以),这时候要怎么做才能更新或插入这个数据呢,有两个方法 存储过程 和 字符拼接

存储过程
DECLARE  
  clobValue hushendayrecordlist.hushendayrecordlist%TYPE;  
BEGIN  
  content := '111122222233....',
  UPDATE blog b SET b.content = content WHERE id='1';
  COMMIT;
END;


使用存储过程将要更新的字符数据赋值给变量, 然后执行sql 的时候sql 解析器直接从变量中获取数据进行更新,在解析器校验sql的时候sql 就没有那么长了,这样就避免了sql 过长的问题,但是,在项目中是无法使用这个存储过程的, 所以这个方法只能舍弃

concat or ||
concat 或 || 可以将数据拼接到原数据后面, 可以这样来使用
update blog set content = concat('', '1111111111111') where id = 1
or
update blog set content = '' || '1111111111111' where id = 1

不过这种情况还是无法解决 数据多长的问题,因为拼接数据的时候, 新数据的长度不能超过1000个字符,不然也会报错, 这时候可以使用 to_clob()函数,to_clob('111111...')可以存储4000个字符的数据,然后用这个 to_clob 进行拼接, 如:

update blog set content = '' || to_clob('1111111...')

如果字符长度超过 4000个字符的时候呢?这时候可以将要更新的新数据按长度进行切割,然后使用多个拼接进行更新, 如:
update blog set content = content || to_clob('111111111...') || to_clob('22222222...') || to_clob('333333...') ... where id = 1
多个to_clob()就可以将可以用一条update 更新 几千上万字符长度的数据, 这个时候虽然sql还是很长,但是有 to_clob()进行包裹,这时候sql 解析器应该是略过这个函数,不把这个to_clob()当做正常的sql字段进行计算
————————————————
版权声明:本文为CSDN博主「tnan2522」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42031243/article/details/112401916

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值