oracle插入CLOB类型超过4000个字符报ORA-01704错的解决方法
今天碰到一个问题,测试童鞋希望把tomcat的报错日志报错到数据库中,结果调用insert into的时候,报ORA-01704。INSERT INTO SYSTEM.QYQTEST2021(ID, MLOG) VALUES(3, '好长好长的字符串..');报错:ORA-01704:字符串文字太长解决方案,声明一个变量v_clobsqlDECLARE v_clobsql CLOB;BEGINv_
·
今天碰到一个问题,测试童鞋希望把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;
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)