最近在做一個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長,所以會報錯字符串太長
?