Oracle一个诡异的错误——Can bind a LONG value only for insert into a LONG column

Oracle一个诡异的错误——Can bind a LONG value only for insert into a LONG column

CrmProductTaskEndAction : SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [72000]; error code [1461];   
--- The error occurred in com/alibaba/intl/bops/crm/syslog/dao/ibatis/sqlmap/CRM_SYSLOG_EMAIL.xml.  
--- The error occurred while applying a parameter map.  
--- Check the CRM_SYSLOG_EMAIL.insert-InlineParameterMap.  
--- Check the statement (update failed).  
Error: java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column

   at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
   at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
   at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
   at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
   at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
   at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)
   at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
   at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3316)
   at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3422)
   at com.alibaba.ark.jdbc.PreparedStatementWrapper.execute(PreparedStatementWrapper.java:136)

原因就是字段超长。LONG column是Oracle老的BLOB数据类型,已经deplicated了,Use BLOB instead of LONG。

DatatypeDescriptionMax Size:Oracle 8Max Size:Oracle 9i/10gMax Size:Oracle 11gMax Size:PL/SQLPL/SQL Subtypes/Synonyms
VARCHAR2(size)Variable length character string having maximum length size bytes. You must specify size4000 bytes minimum is 14000 bytes minimum is 14000 bytes minimum is 132767 bytes minimum is 1STRING VARCHAR
LONGCharacter data of variable length (A bigger version the VARCHAR2 datatype)2 Gigabytes2 Gigabytes - but now deprecated (provided for backward compatibility only).2 Gigabytes - but now deprecated (provided for backward compatibility only).32760 bytes Note this is smalller than the maximum width of a LONG column 

但是将同样的SQL放在pldev终端直接跑,确实报另外一个错误:

ORA-01401:insert value too large for column

具体参考:Oracle/PLSQL: ORA-01401 Error

为什么同样的SQL,会跑出不同的错误结果,仔细看异常堆栈,发现前面的ORA-01461错误是Oracle JDBC驱动(ojdbc14)抛出来的。


### 2024至2025 Java技术和发展趋势 #### JDK 版本更新与语言特性改进 Java 开发工具包 (JDK) 的持续迭代带来了许多性能优化和新特性。预计在未来两内,JDK 将继续引入更强大的并发处理能力、内存管理机制以及对现代硬件的支持[^1]。此外,为了简化开发者的工作流程并提高生产力,一些实验性的语言特性和API可能会被正式纳入标准库中。 #### Kotlin 和其他 JVM 语言的融合 除了传统的纯Java项目外,越来越多的企业开始采用多语言策略来构建应用系统。特别是Kotlin作为一种完全兼容于现有Java生态系统的静态类型编程语言,在社区中的接受度越来越高。可以预见的是,在未来的几里,这两种语言之间的界限将进一步模糊化,形成更加紧密的合作关系[^2]。 #### AI 技术的应用扩展 人工智能正在改变各行各业的传统业务模式;同样地,这也适用于基于Java平台上的解决方案设计。通过集成机器学习算法和服务端推理引擎等方式,使得原本复杂的任务变得更加自动化且高效。例如图像识别、自然语言处理等领域都可以借助这些新兴科技实现质的飞跃。 #### 微服务架构下的容器编排与云原生实践 随着微服务体系结构成为主流部署方式之一,如何有效地管理和调度众多独立运行的服务实例成为了亟待解决的问题。为此Docker Swarm、Kubernetes等开源项目的兴起提供了很好的思路——即利用声明式的配置文件定义整个集群的状态,并自动完成资源分配等工作。与此同时,“Serverless”计算模型也开始受到广泛关注,因为它能够帮助企业降低运维成本的同时还提高了灵活性。 ```java // 示例:使用Spring Boot创建RESTful Web Service @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` #### 安全性增强措施 鉴于近来频繁爆发的数据泄露事件给企业带来的巨大损失,加强应用程序的安全防护显得尤为重要。针对这一需求,Java 社区也在积极行动起来,比如推出更多内置加密功能或是第三方安全插件支持等功能模块,从而让用户能够在享受便捷服务的同时不必担心个人信息遭到窃取的风险[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值