oracle ORA-01704: string literal too long

本文介绍在Oracle SQL操作中遇到的ORA-01704错误,即字符串过长的问题,并提供两种解决方案:一是通过存储过程使用CLOB类型变量来承载长文本;二是通过字符串拼接的方式逐步更新数据。此外,还提到了一些预防措施,如使用事务变量或分页处理。
摘要由CSDN通过智能技术生成

导出数据时,在SQL拼接处,提示 oracle ORA-01704: string literal too long

 sql:

 WITH already_in AS
 (SELECT distinct REGEXP_SUBSTR('-999,CX201702210003,CX201702270003,……,CX201702270004', '[^,]+', 1, level) col   from dual
  connect by level <= length(regexp_replace(''-999,CX201702210003,CX201702270003,……,CX201702270004',  '[^,]*')) + 1)
select pro.*, u.user_name PROJECT_MANAGER_NAME
  from cp_p pro  left join cdc_u u    on u.user_id = pro.PROJECT_MANAGER
 where 1 = 1   and exists (select * from already_in al where al.col = pro.project_code)
   AND pro.project_manager not in (select info.user_id  from cdc_user_info info  where info.user_name in ('fff'))
 
拼接的字符串超长导致“string” 抛异常。减少了拼接字符后,顺利执行。
注意:在拼接sql时,用于某类型字段的拼接,需要注意其长度。事先预测一下需要拼接的字符最长会达到多少,超长的话可以使用clob类型字段。
尽量避免拼接超长字符用在sql中,如必须,可以声明一个事务变量,或者分页处理(或分段连接处理)。
 
网上有相关处理方式,引用一下:

有两种方法可以解决:

1.使用存储过程,把超长文本保存在一个变量中,然后再insert update

declare
v_clob clob :='一个长文本';
begin
  insert into table values(a,3,:clob);
 end;

2.字符串拼接,update使用字符串拼接

 update mall_config set category_info='安全防护:3003,' where id=1;

update mall_config set category_info=category_info||'|标准件:1040140,1035382,' where id=1;

转载于:https://www.cnblogs.com/yeyuchangfeng/p/6677040.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值