最近有位朋友问我:开发中向CLOB字段存储string时报了ORA-01704的错误不知道怎么解决。首先造成这个问题的原因相信大家都明白,就是因为插入的字符串过长导致,因为oracle在插入CLOB的数据默认会以varchar2的类型插入,所以当超过4000个字符时就会报ORA-01704的错误了(varchar2类型的字符长度是4000,注意:oracle对汉字的存储占3个字符)

在这里我分享下对于这个问题解决方法(持久层基于mybatis开发):

创建库:

create table test(

  id varchar2(200),

  text clob

);

创建JavaBean

package cn.com;

public class test{

  private String id;

  private String text;

  .......//省略get/set方法

}

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

mybatis具体XML内容如下:

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

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

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

  END;
</insert>

对于以上方法,在插入,查询以及更新CLOB字段时这种方式会影响程序的性能;对于性能要求不高时可以一试。

那么要提高性能又应该怎么做呢?这里有2中方法可以参考:

第一种方式:使用文件存储数据

当数据量特别大达到几M甚至几十M的时候,虽然CLOB也能存下但不建议直接存ORACLE,最好的方式将数据存自盘上,在ORACLE中只留下数据文件的地址信息这样我们在插入与查询上性能会快很多,对网络的开销也小。当我们需要读取数据时再从文件中读取数据。相对于前者直接获取存储在内存中,这种方式要灵活得多。

第二种方式:将数据切分成一段一段分散到表中存储

新建一张表用作CLOB内容存储,test中的CLOB字段就可以删除不要了

create table text(

  test_id varchar2(200),//test表的id,用作外键关联

  text varchar2(3000),//CLOB的分段数据,以1000个汉字作为存储单元

  sort number(8)//text的显示顺序,在展示内容是按此顺序依次展示出来

);

这其实是就是一种分页的思想,很多大的企业都有自己一套存储数据的规则,他们出于对系统性能的考虑都会禁止使用CLOB,BLOB,LONG这样的大容量存储的字段类型,有些更甚者对于varchar2字段存储的长度也有限制。使用这种方式就可以完美解决以上的问题,同时在你使用也可以有选择性的获取相关数据,其灵活性有了更好的保证

  说到这里相信大家都明白怎么回事了吧,具体的代码实现就不贴出来了,请根据开发需求自行斟酌使用。

  希望有更好解决方案的朋友多多分享,谨诚拜谢!!!

转载于:https://www.cnblogs.com/call-me-pengye/p/11136870.html

oracle插入CLOB类型超过4000个字符报ORA-01704错的解决方法及其它相关场景解决方案...相关推荐

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

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

  2. oracle截取clob类型

    clob类型超过4000无法用to_char--substr(字符串,截取开始位置,截取长度)=返回截取的字 select substr('miaoying',0,1) from dual;--返回结 ...

  3. oracle xmltype转字节,extractvalue处理XMLTYPE类型超过4000字节ORA-01706的解决方法

    extractvalue处理XMLTYPE类型超过4000字节ORA-01706的解决方法 发布时间:2020-08-14 15:40:17 来源:ITPUB博客 阅读:226 作者:guocun09 ...

  4. python连接oracle数据库 插入clob类型数据

    python连接oracle数据库 插入clob类型数据 连接数据库 import cx_Oracle as cx #导入模块 con = cx.connect('root', 'root123', ...

  5. oracle clob 类型条件,Oracle中Clob类型如何处理?

    Oracle中Clob类型处理解析最近利用NHibernate映射类型为Clob字段在插入数据时发现当字符的字节数(一个半角字符一个字节,一个全角字符两个字节)在 2000-4000之间时报错(ORA ...

  6. oracle插入数字类型能用单引号括起来为什么

    oracle插入数字类型能用单引号括起来为什么 2014-02-24 18:30匿名 | 浏览 631 次 create table emp(id number,name varchar2(20)); ...

  7. Oracle查询CLOB类型字段的内容:

    Oracle查询CLOB类型字段的内容: (1)数据长度<4000时,查询CLOB类型的数据: select dbms_lob.substr(字段名) as 别名 from 表名----别名必须 ...

  8. mybatis没有clob类型_mybatis将Oracle的Clob类型转成String的方法

    默认情况下,mybatis将oracle的Clob类型查询出来,结果是oracle.sql.CLOB@13cda7c9这样的. 下面是将CLOB类型转换成String的方法 首先,添加一个转换的类,实 ...

  9. android ellipsize 多行,android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法...

    android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法 布局文件中的TextView属性 复制代码 代码如下: android:id="@+id/b ...

最新文章

  1. jquery对所有input type=text的控件赋值
  2. SAP PM 初级系列20 - 维修工单的检验批
  3. 掌握深度学习,为什么要用 PyTorch、TensorFlow 框架?
  4. [转] Sublime Text3 配置 NodeJs 环境
  5. linux使用gcc编译报错“undefined reference to `pthread_create'”
  6. Junit4中的新断言assertThat的使用方法
  7. 19_debug断点调试
  8. 数学建模四大模型、历年国赛题目以及优秀论文(备战2021年数模国赛)
  9. Excel表格输入身份证数字就变了 Excel函数公式大全 Excel表格制作
  10. 微信小程序服装商城+后台管理系统
  11. 面对互联网寒冬,程序员能够做什么?
  12. CSS( Cascading Style Sheets )简书
  13. ipad pro pythonista_这 15 个应用 , 程序员用 iPad 照样可以编程 !
  14. 【Python】html格式转md格式
  15. 如何让在国内访问github网站的速度变快
  16. C++产生随机数的几种方法
  17. Android中HashMap内存优化之ArrayMap和SparseArray
  18. selenium的常见方法及使用
  19. 智能门禁系统教程--人脸识别方案
  20. 不同调制方式对信道容量影响的分析

热门文章

  1. 【推荐】开源堡垒机Teleport
  2. android开发中eclipse里xml开发的自动提示和使用帮助快捷键提示
  3. php不常用,却很实用的6个字符串函数
  4. 云服务器文件同步,Windows 8:本地文件与云服务器同步
  5. 思科交换机配置试题_【干货】思科交换机路由器怎么配置密码?
  6. Spring高级之注解@PropertySource详解(超详细)
  7. python列表赋值 连续整数_列表切片赋值,小技巧(Python基础)。
  8. java初反射_java中的反射机制
  9. jmeter java性能_jmeter之自定义java请求性能测试
  10. 类 java_java类的基本结构