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

当尝试在Oracle数据库中使用INSERT语句插入超过4000个字符的字符串时,会出现ORA-01704错误。这是因为默认情况下Oracle会将其视为VARCHAR2类型,限制为4000个字符。解决办法是使用CLOB类型,通过声明变量并用PL/SQL将数据插入。在Java或MyBatis中,可以使用CLOB变量来存储长字符串,然后插入到数据库中,避免报错。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    今天碰到一个问题,测试童鞋希望把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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七七powerful

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值