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

落爺英雄遲暮 提交于 2020-01-05 04:00:21

最近在做一个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长,所以会报错字符串太长

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!