动态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长,所以会报错字符串太长

 

posted on 2016-06-16 14:44  再累也要守住饭碗  阅读(1606)  评论(0编辑  收藏  举报

导航