oracle插入CLOB类型超过4000个字符报ORA-01704错的解决方法

    今天碰到一个问题,测试童鞋希望把tomcat的报错日志报错到数据库中,结果调用insert into的时候,报ORA-01704。

INSERT INTO SYSTEM.QYQTEST2021(ID, MLOG) VALUES(3, '好长好长的字符串..');

报错:ORA-01704:字符串文字太长

解决方案,声明一个变量v_clobsql

DECLARE v_clobsql CLOB;
BEGIN
v_clobsql := '好长的字符串';
INSERT INTO SYSTEM.QYQTEST2021(ID, MLOG) VALUES(3, v_clobsql);
COMMIT;
END;

引起原因

因为oracle在插入CLOB的数据默认会以varchar2的类型插入,所以当超过4000个字符时就会报ORA-01704的错误了(varchar2类型的字符长度是4000,注意:oracle对汉字的存储占3个字符)

测试案例:


DECLARE v_clobsql CLOB;
BEGIN
v_clobsql := '
create table system.qyqtest2021(
  id varchar2(200),
  mlog clob
);

创建JavaBean

package cn.com;

public class test{

  private String id;

  private String text;
解决方式:使用变量,通过PL/SQL将数据赋予CLOB变量,通过引用变量将数据插入

mybatis具体XML内容如下:

<insert id="insert" parameterType="cn.com.test">

  DECLARE
         V_LANG CLOB := #{text,jdbcType=CLOB};
  BEGIN

    INSERT INTO test(ID, MLOG) VALUES(#{id,jdbcType=VARCHAR}, V_LANG);

  END;
</insert>
';
INSERT INTO SYSTEM.QYQTEST2021(ID, MLOG) VALUES(3, v_clobsql);
COMMIT;
END;

猜你喜欢

转载自blog.csdn.net/qyq88888/article/details/121825261
今日推荐