
大量数据录入遇到sql过长 也就是ora-01704的错误小伙伴可以看过来啦
数据录入失败:使用 Navicat 进行数据传输时,可能会遇到 ora-01704 错误。 错误原因:根据百度资源,ora-01704 错误通常是由于 SQL 语句中引号内字符数超过 4000 个所致。 常见解决方法:通过存储过程变量形式来解决,但由于涉及多数据库且单表数据超过 20000 条,存储过程方案不够高效。 内存溢出问题:在单条数据录入过程中,字符数接近 5000 个时,会出现内存溢出错误,需要寻找其他优化方案。 参考方案:参考了 博主的技术文章,结合自身需求进行了优化。 预编译查询:对于高频数据录入,建议对数据库查询进行优化,减少执行时间。 批处理处理:对于大批数据,可以通过批处理方式来提高数据录入效率。 数据库设计:在数据库设计时,尽量减少大文本字段的使用,或者在字段级别进行合理分割。
发布日期:2021-05-14 09:10:10
浏览次数:17
分类:精选文章
本文共 1742 字,大约阅读时间需要 5 分钟。
Oracle 数据录入优化方案:解决 ora-01704 错误
在实际项目中,经常会遇到 Oracle 数据库 中 CLOB 类型字段录入问题,尤其是在处理大量数据时,可能会遇到 ora-01704 错误。这个错误提示是由于 SQL 语句中引号内字符数超过 4000 个所引起的。以下是针对该问题的详细分析与解决方案。
问题背景
优化思路
问题分析:
- CLOB 字段录入:在 Oracle 数据库中,CLOB 类型字段的录入可能会导致字符长度超限,特别是在处理大文本数据时。
- 内存问题:单条数据录入时,字符数接近 5000 个会导致内存溢出,需要优化处理方式。
解决方案:
- JDBC 调用:通过 Java 程序结合存储过程来实现数据录入。
- CLOB 对象管理:正确管理 CLOB 对象,避免内存泄漏。
- 优化数据库查询:针对数据库查询进行优化,减少不必要的资源消耗。
实现步骤
数据库连接配置:
BaseDao baseDao = new BaseDao("com.microsoft.sqlserver.jdbc.SQLServerDriver", "jdbc:sqlserver://192.168.27.11;DatabaseName=HYJXC", "sa", "Aaa123456");Connection con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.27.11:1521:ORCL", "JEPLUS_HYJXC", "JEPLUS_HYJXC");
CLOB 对象创建:
OracleConnection OCon = (OracleConnection) con;CLOB clob1 = new CLOB(OCon);CLOB clob2 = new CLOB(OCon);CLOB clob3 = new CLOB(OCon);CLOB clob4 = new CLOB(OCon);
数据处理逻辑:
while (rs.next()) { OraclePreparedStatement ps = OCon.prepareCall(sql); try { ps.setClob(1, clob1); ps.setClob(2, clob2); ps.setClob(3, clob3); ps.setClob(4, clob4); ps.setObject(5, rs.getObject("FHTZD_BCFCL")); ps.executeUpdate(); } finally { ps.close(); ps = null; }}
内存管理:
- 在每次使用 CLOB 对象后,及时释放资源,避免内存泄漏。
- 在数据库连接关闭前,确保所有预编译语句和结果集已经正确关闭。
优化建议
总结
通过上述优化方案,可以有效解决 Oracle 数据库 中 CLOB 类型字段的录入问题,避免 ora-01704 错误的发生。同时,通过正确管理 CLOB 对象和优化数据库查询,可以显著提升数据录入的效率和稳定性。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月28日 10时42分22秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
CoreCLR源码探索(八) JIT的工作原理(详解篇)
2019-03-06
IOS开发Swift笔记16-错误处理
2019-03-07
flume使用中的一些常见错误解决办法 (地址已经使用)
2019-03-07
andriod 开发错误记录
2019-03-07
C语言编译错误列表
2019-03-07
看明白这两种情况,才敢说自己懂跨链! | 喵懂区块链24期
2019-03-07
张一鸣:创业7年,我经历的5件事
2019-03-07
git拉取远程指定分支代码
2019-03-07
《web安全入门》(四)前端开发基础Javascript
2019-03-07
python中列表 元组 字典 集合的区别
2019-03-07
python struct 官方文档
2019-03-07
Android DEX加固方案与原理
2019-03-07
Android Retrofit2.0 上传单张图片和多张图片
2019-03-07
iOS_Runtime3_动态添加方法
2019-03-07
Leetcode第557题---翻转字符串中的单词
2019-03-07
Problem G. The Stones Game【取石子博弈 & 思维】
2019-03-07
Unable to execute dex: Multiple dex files
2019-03-07
Java多线程
2019-03-07