本文主要向大家介绍了Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

Oracle数据库,用mybatic批量插入数据:

insert into "NODE_DATA"

(

"NODE_ID",

"DATA_TIME",

"DATA_VALUE",

"DATA_NUMBER",

"DATA_VERSION",

"INVALID"

)

SELECT

#{item.nodeId, jdbcType=VARCHAR},

#{item.dataTime, jdbcType=DATE},

#{item.dataValue, jdbcType=VARCHAR},

#{item.dataNumber, jdbcType=NUMERIC},

#{item.dataVersion, jdbcType=NUMERIC},

#{item.invalid, jdbcType=NUMERIC}

FROM dual

当数据量过大时,出错:

ORA-01745: 无效的主机/绑定变量名

网上一查说是缺失逗号,查找并排除了,问题依旧。

后来想到可能是SQL语句太长,在上例中插入数据是一万多条,拼接成的SQL语句至少好几十k了。

长度限制的相关文章:http://bbs.csdn.net/topics/390302851?page=1

长度限制说明如下:

1. IN 子句中的LIST个数最长为1000,超过该数目将报错,这里可转用一个临时表来解决;2.  * CREATE TRIGGER语句文本的字符长度不能超过32KB(触发器中不能使用LONG, LONG RAW 类型;触发器内可以参照LOB 类型列的列值,但不能通过 :NEW 修改LOB列中的数据;)顺便说一下,触发器中的PARENT关键字,只在嵌套表触发器中有效,3.  * 11G以前,DBMS_SQL对输入的SQL长度不能超过32K,原因是输入参数只能是VARCHAR2类型,11G后,可以用CLOB作为输入参数,则取消了这个限制3.  * 一个PL/SQL的包、过程、函数、触发器的大小,在UNIX上最大是64K,而WINDOWS则是32K大小(32K这个应该不准,看下面的测试)4.  * SQL语句可以有多长?(网友说)Oracle文档说是64K,实际受一些工具的限制会较这个值低,但网友测试发现可以很长,甚至超过1M(我测试过 170K的都没问题)。具体多长,10G也未说明,只是与很多环境有关:数据库配置,磁盘空间,内存多少。。。5.  PL/SQL中,表达式/SQL本身的长度是可以达到比较长的长度(50K)左右,如:v_str:=:new.f1||:ndw.f2。。。 ; select :new.f1||:new.f2。。。 into v_str from dual; 另外发现,如果这样写:v_str := ‘a’||’b’||。。。则允许的表达式长度将大大的减少。如果表达式/SQL过长,超过了一个ORACLE包/过程允许的最大程序长度,则在编译时报 pls-123:program too large错误,这是pl/sql编译器本身的限制造成的,即表达式/SQL的长度在PL/SQL中受限于包/过程的最大大小 varchar2 sql最多4000个字节,2000个汉字字符  pl/sql 最多32767个字节clob     最多4Gb

明白了可能是这个问题后,针对原因改写代码,限制每条SQL语句最多插入2000条后,问题解决。

1         if (dataList.size() > 0) {

2             new Thread() {

3                 @Override

4                 public void run() {

5                     //为了防止SQL语句超出长度出错,分成几次插入

6                     if(dataList.size()<=2000){

7                         nodeDataService.save(dataList);

8                     }else{

9                         int times = (int)Math.ceil( dataList.size()/2000.0 );

10                         for(int i=0; i

11                             System.out.println("分批插入:"+ i);

12                             nodeDataService.save(dataList.subList(i*2000, Math.min((i+1)*2000, dataList.size()-1)));

13                         }

14                     }

15                 }

16             }.start();

17         }

本文由职坐标整理并发布,希望对同学们学习Oracle有所帮助,更多内容请关注职坐标数据库Oracle数据库频道!

oracle insert汉字出错,Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名...相关推荐

  1. Oracle数据库:实现批量插入的sql语句

    目录 问题现象: 问题分析: 注意:这里一定要注意分号(;)的使用: 否则容易出现报错,如: 解决方法: 问题现象: 今天想使用Oracle数据库进行批量插入的操作,发现和想象中的不太一样,报错如下: ...

  2. 用python操作mysql数据库(之批量插入数据)

    #!/usr/bin/env python # -*- coding: utf-8 -*- import MySQLdb #建立连接 conn = MySQLdb.connect(host='127. ...

  3. PostgreSQL数据库使用函数批量插入数据

    对于PostgreSQL数据库,批量插入数据有两种方式,一是直接执行一条SQL,这也是最简便的,可参考:postgreSQL数据库 向表中快速插入1000000条数据​​​​​​​ 但有时为了方便多次 ...

  4. C mysql批量写入_使用JDBC在MySQL数据库中快速批量插入数据

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(10W+),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: Adds a set of ...

  5. 杰奇CMS phpmyadmin清空数据库ID归零重新入库数据SQL语句教程

    具体步骤如下: 打开你服务器phpmyadmin后台,找到你当前杰奇CMS程序创建的数据库,找到jieqi_article_chapter数据表,然后点击表名称,然后点击上面导航栏的SQL栏目,复制粘 ...

  6. oracle批量插入报错,MyBatis Oracle批量插入数据

    导语:在开发中或多或少都会遇到数据批量插入的功能,最近我在做项目的过程中就遇到了这样一个问题.上传Excel文件,解析文件内容并将解析的内容插入数据库. 思路分析 1.解析Excel文件 Excel文 ...

  7. Oracle 批量插入数据-插入民族数据

    数据库需要导入民族数据,在网上找到数据,如果一条一条手动导入数据库,显得有点蠢了,所以在excel里,利用excel的优势,编写好sql语句,结果在oracle里执行失败,很简单的语句,没有语法问题 ...

  8. oracle tcpdump生成bpf,[20140212]linux下使用tcpdump抓取sql语句

    [20140212]linu下使用tcpdump抓取sql语句.txt 我们生产系统问题多多,经常要跟踪用户执行的sql语句,当出现问题时要跟踪比较麻烦,我需要一个快捷的方式"看到" ...

  9. 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...

    java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...

最新文章

  1. docker 绑定固定ip 跨主机容器互访
  2. 10.5 考试 (感觉比较难)
  3. 宅男程序员给老婆的计算机课程
  4. 2017上半年计算机教学计划,2016—2017学年度第二学期信息技术教学计划
  5. 从程序员角度看ELF
  6. Caffarelli 关于自由边界正则性的论文C1
  7. redis发布与订阅
  8. java IO流详解及特性
  9. react调用api等待返回结果_程序员:RPC远程调用原理浅析
  10. 【Transformer】没有什么多模态任务是一层Transformer解决不了的!
  11. tolua中使用protobuf3—集成lua-protobuf
  12. Debian10: 安装兄弟DCP-7080D打印机
  13. html如何调用less,LESS
  14. gazebo教程(八)场景建模
  15. 2022焊工(初级)考试题库及答案
  16. 计算机网络通过IP地址计算子网掩码
  17. VS2019除出现许可证过期问题-无法下载许可证
  18. python刷今日头条访问量_Python 自动刷博客浏览量实例代码
  19. UML画图文档之汇总
  20. d3.js中svg的下载

热门文章

  1. java 文件 缓冲区大小_Java web 中文件下载遇到的缓冲大小问题
  2. ThinkPHP快捷方法使用总结
  3. MySQL数据表的优化
  4. python随机生成四位验证码的代码_Python random随机生成6位验证码示例代码
  5. python 问题不符合dcp rule_约束不遵循CVXPY中的DCP规则
  6. index match函数的使用方法_必学函数组合INDEX+MATCH,秒杀VLOOKUP函数
  7. ajax传递参数与controller接收参数映射关系
  8. TensorFlow实战笔记(17)---TFlearn
  9. matlab中滤波器函数filter的c语言实现
  10. LayerMask小结