oracle insert汉字出错,Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名...
本文主要向大家介绍了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语句太长出错:无效的主机/绑定变量名...相关推荐
- Oracle数据库:实现批量插入的sql语句
目录 问题现象: 问题分析: 注意:这里一定要注意分号(;)的使用: 否则容易出现报错,如: 解决方法: 问题现象: 今天想使用Oracle数据库进行批量插入的操作,发现和想象中的不太一样,报错如下: ...
- 用python操作mysql数据库(之批量插入数据)
#!/usr/bin/env python # -*- coding: utf-8 -*- import MySQLdb #建立连接 conn = MySQLdb.connect(host='127. ...
- PostgreSQL数据库使用函数批量插入数据
对于PostgreSQL数据库,批量插入数据有两种方式,一是直接执行一条SQL,这也是最简便的,可参考:postgreSQL数据库 向表中快速插入1000000条数据 但有时为了方便多次 ...
- C mysql批量写入_使用JDBC在MySQL数据库中快速批量插入数据
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(10W+),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: Adds a set of ...
- 杰奇CMS phpmyadmin清空数据库ID归零重新入库数据SQL语句教程
具体步骤如下: 打开你服务器phpmyadmin后台,找到你当前杰奇CMS程序创建的数据库,找到jieqi_article_chapter数据表,然后点击表名称,然后点击上面导航栏的SQL栏目,复制粘 ...
- oracle批量插入报错,MyBatis Oracle批量插入数据
导语:在开发中或多或少都会遇到数据批量插入的功能,最近我在做项目的过程中就遇到了这样一个问题.上传Excel文件,解析文件内容并将解析的内容插入数据库. 思路分析 1.解析Excel文件 Excel文 ...
- Oracle 批量插入数据-插入民族数据
数据库需要导入民族数据,在网上找到数据,如果一条一条手动导入数据库,显得有点蠢了,所以在excel里,利用excel的优势,编写好sql语句,结果在oracle里执行失败,很简单的语句,没有语法问题 ...
- oracle tcpdump生成bpf,[20140212]linux下使用tcpdump抓取sql语句
[20140212]linu下使用tcpdump抓取sql语句.txt 我们生产系统问题多多,经常要跟踪用户执行的sql语句,当出现问题时要跟踪比较麻烦,我需要一个快捷的方式"看到" ...
- 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...
java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...
最新文章
- docker 绑定固定ip 跨主机容器互访
- 10.5 考试 (感觉比较难)
- 宅男程序员给老婆的计算机课程
- 2017上半年计算机教学计划,2016—2017学年度第二学期信息技术教学计划
- 从程序员角度看ELF
- Caffarelli 关于自由边界正则性的论文C1
- redis发布与订阅
- java IO流详解及特性
- react调用api等待返回结果_程序员:RPC远程调用原理浅析
- 【Transformer】没有什么多模态任务是一层Transformer解决不了的!
- tolua中使用protobuf3—集成lua-protobuf
- Debian10: 安装兄弟DCP-7080D打印机
- html如何调用less,LESS
- gazebo教程(八)场景建模
- 2022焊工(初级)考试题库及答案
- 计算机网络通过IP地址计算子网掩码
- VS2019除出现许可证过期问题-无法下载许可证
- python刷今日头条访问量_Python 自动刷博客浏览量实例代码
- UML画图文档之汇总
- d3.js中svg的下载
热门文章
- java 文件 缓冲区大小_Java web 中文件下载遇到的缓冲大小问题
- ThinkPHP快捷方法使用总结
- MySQL数据表的优化
- python随机生成四位验证码的代码_Python random随机生成6位验证码示例代码
- python 问题不符合dcp rule_约束不遵循CVXPY中的DCP规则
- index match函数的使用方法_必学函数组合INDEX+MATCH,秒杀VLOOKUP函数
- ajax传递参数与controller接收参数映射关系
- TensorFlow实战笔记(17)---TFlearn
- matlab中滤波器函数filter的c语言实现
- LayerMask小结