动态SQL+变量绑定:解决ORA-01704: 字符串文字太长的问题

最近在做一个ESB项目,有一个trigger里面执行动态SQL的时候报错:

ORA-01704: 字符串文字太长

经检查发现SQL里面有个字段是clob类型,内容长度4009,在oracle里面,

一对引号内的字符长度如果超过4000,就会报ORA-01704: 字符串文字太长的错误;

在网上查了一下资料,有大神提出了解决的方法:动态SQL+变量绑定:

什么是动态SQL、什么是变量绑定,度娘上有很多资料,这里就不解释了

下面例子测试通过了:

EXECUTE IMMEDIATE 'insert into '||V_ROW.t_id||' VALUES(:1,:2,:3,:4,:5)'
                    USING V_1, V_2, V_3, V_4, V_CLOB;

上面的:1,:2,:3,:4,:5就是绑定变量,using后面的几个变量就是和上面的几个绑定变量一一对应;

最后一个变量V_CLOB是一个内容长度超过4000的clob类型变量;

如果写成这样:会报ORA-01704: 字符串文字太长的错误;

EXECUTE IMMEDIATE 'insert into '||V_ROW.t_id

           ||' VALUES('''||REPLACE(V_1,'''','''''')
                      ||''','''||REPLACE(V_2,'''','''''')
                      ||''','''||REPLACE(V_3,'''','''''')
                      ||''','''||REPLACE(V_4,'''','''''')
                      ||''','''||V_CLOB
                      ||''')';

上面对分隔符做了处理,不做多解释,这里V_CLOB变量,内容超过4000长,所以会报错字符串太长

 

转载于:https://www.cnblogs.com/hglh1287/p/5590947.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值