• 关于oracle批量插入数据遇到的问题


    截取部分日志信息:

    2015-09-01 14:48:47,132 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
    2015-09-01 14:48:47,178 INFO [org.springframework.jdbc.support.SQLErrorCodesFactory] - SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana]
    org.springframework.jdbc.UncategorizedSQLException:
    ### Error updating database. Cause: java.sql.SQLException: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值

    查找原因:

    报异常原因:向数据库执行插入日志数据操作时,user_agent字段值过长,如果是varchar2类型的,varchar2类型最大长度是4000,当超过4000,oracle会自动将该字段值转为long型的,然后,插入操作失败。解决办法是:将此字段的类型改为clob或者blob类型;

    下面是解决办法【因为之前这张表中有数据,所以新添加一列,进行复制数据】:

    --添加一个clob类型字段 ,clob不需指定长度
    alter table log_access add (userAgent_bak  clob);

    --将原来的值拷贝到新建的字段

    update log_access a set a.useragent_bak = a.user_agent;

    --删除原来的字段
    alter table log_access drop column useragent_bak

    --将新建的clob字段修改为原来的字段名称
    alter table log_access rename column useragent_bak to user_agent

    commit。

    一直考虑着新增字段,修改字段类型,其实插入的数据是日志信息,一些数据可以通过后台进行截取,这样就不用修改字段类型了。

    网上看到造成该问题的原因,收集如下:

    报错“ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”,可能有以下几种原因:
    1、插入到字符串长度大于4000字节。
    2、插入到表中的记录的某个字段数据的实际长度大于2000个字节(如果是UTF-8,则是1333个字节);或者是插入的记录中有两个或两个以上长度大于2000字节的字符串。
    3、数据库与客户端的JDBC驱动不匹配。
    对于UTF-8或欧洲的某些字符集,oracle在存储时,对于一个字符需要2个或3个字节的存储空间,虽然表定义中为varchar2(4000),但是其实该字段的data_length为其2倍或3倍长。这种情况下oracle会把data_length长度超过4000的当做LONG型处理,你的表中有两个这样的字段,插入数据时相当于同时操作2个LONG字段。

    clob与blob的区别:

    1.BLOB   

     BLOB全称为二进制大型对象(Binary   Large   Object)。它用于存储数据库中的大型二进制对象。可存储的最大大小为4G字节   

    2.CLOB   
    CLOB全称为字符大型对象(Character   Large   Object)。它与LONG数据类型类似,只不过CLOB用于存储数据库中的大型单字节字符数据块,不支持宽度不等的字符集。可存储的最大大小为4G字节   

  • 相关阅读:
    [Visual Studio] [Config] [Transformation] [SlowCheetah] 在非Web工程中使用Transformation
    [SQLSERVER] 把TransactionLog截断
    [Windows] [Firewall] 增加进入规则
    [POWERSHELL] [.net 3.5] [Windows Server] 在Windows Server上安装.NET3.5
    杂碎
    VSCode 使用Settings Sync同步配置(最新版教程,非常简单)
    JavaScript:ES2019 的新特性
    重新认识构造函数、原型和原型链
    如何实现 React 中的状态自动保存?
    深拷贝
  • 原文地址:https://www.cnblogs.com/yangh965/p/4776605.html
Copyright © 2020-2023  润新知