oracle sql 缺失逗号号,这个插入语句怎么写

Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名
时间: 14:06:12
&&&& 阅读:88
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&Oracle数据库,用mybatic批量插入数据:
&insert id="saveBatch" parameterType="io.renren.entity.NodeDataEntity"
databaseId="oracle"&
insert into "NODE_DATA"
"NODE_ID",
"DATA_TIME",
"DATA_VALUE",
"DATA_NUMBER",
"DATA_VERSION",
&foreach collection ="list" item="item" index= "index" separator =" union "&
#{item.nodeId, jdbcType=VARCHAR},
#{item.dataTime, jdbcType=DATE},
#{item.dataValue, jdbcType=VARCHAR},
#{item.dataNumber, jdbcType=NUMERIC},
#{item.dataVersion, jdbcType=NUMERIC},
#{item.invalid, jdbcType=NUMERIC}
&/foreach &
当数据量过大时,出错:
ORA-01745: 无效的主机/绑定变量名
网上一查说是缺失逗号,查找并排除了,问题依旧。
后来想到可能是SQL语句太长,在上例中插入数据是一万多条,拼接成的SQL语句至少好几十k了。
长度限制的相关文章:
长度限制说明如下:
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&&另外发现,如果这样写: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条后,问题解决。
if (dataList.size() & 0) {
new Thread() {
public void run() {
//为了防止SQL语句超出长度出错,分成几次插入
if(dataList.size()&=2000){
nodeDataService.save(dataList);
int times = (int)Math.ceil( dataList.size()/2000.0 );
for(int i=0; i& i++ ){
System.out.println("分批插入:"+ i);
nodeDataService.save(dataList.subList(i*2000, Math.min((i+1)*2000, dataList.size()-1)));
}.start();
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!查看: 1925|回复: 15
缺失逗号的问题
论坛徽章:0
1.建dblink
2.通过dblink远程插入数据
实在看不出来哪里缺失逗号了& &execute immediate v_& &在本地新建COMPANY表时,插入语句没有错误提示
create or replace procedure message_backfill
p_user varchar2(20);
v_sql varchar2(500);
v_insert varchar2(2000);
p_rowCompany COMPANY_REGISTER_INFO%
&&select count(*) into p_count from CountT
&&select c_name into p_user from CountTablespace where id = p_
&&v_sql := 'create database link ' || p_user ||
& && && && && && && & ' connect to ' || p_user || ' identified by ' || p_user || 'admin
  & && && && && && & using ''(DESCRIPTION =
& && && && && && && && && && &&&(ADDRESS_LIST =
& && && && && && && && && && && & (ADDRESS = (PROTOCOL = TCP)(HOST = 10.5.113.230)(PORT = 1521)))
& && && && && && && && && && && & (CONNECT_DATA =
& && && && && && && && && && && & (SERVICE_NAME = CDBECC))
& && && && && && && && && && &&&)''';
& &dbms_output.put_line(v_sql);
& &execute immediate v_
&&select * into p_rowCompany from COMPANY_REGISTER_INFO;
&&v_insert := 'insert into COMPANY@' || p_user || ' (
& && && && && && & ID,
& && && && && && & COMPANY_TYPE,
& && && && && && & SUPER_COMPANY_CODE,
& && && && && && & SUPER_COMPANY_NAME,
& && && && && && & BUSINESS_LICENSE_CODE,
& && && && && && & BUSINESS_LICENSE_URL,
& && && && && && & TAX_CERTIFICATE_CODE,
& && && && && && & TAX_CERTIFICATE_URL,
& && && && && && & ORGANIZATION_CODE,
& && && && && && & ORGANIZATION_URL,
& && && && && && & COMPANY_ESTABLISHED_DATE,
& && && && && && & STATUS,
& && && && && && & REMARK,
& && && && && && & FILE_PATH,
& && && && && && & COMPANY_CODE,
& && && && && && & COMPANY_NAME,
& && && && && && & COMPANY_ADDRESS,
& && && && && && & PHONE,
& && && && && && & COMPANY_MANAGER,
& && && && && && & REGEDIT_DATE,
& && && && && && & MOBILE_PHONE
& && && && && && & )
& && && && && && & values(1,
& && && && && && & ''1'',
& && && && && && & ''000000'',
& && && && && && & ''电子商务云'',
& && && && && && & '' '',
& && && && && && & '' '',
& && && && && && & '' '',
& && && && && && & '' '',
& && && && && && & ''001'',
& && && && && && & '' '',
& && && && && && & to_date('''',''yyyy-mm-dd''),
& && && && && && & ''1'',
& && && && && && & ''电子商务云'',
& && && && && && & ''http://10.5.113.230:7001/ElectronicCommerceCloud/fileServer/000005'','
& && && && && && & || pany_info_phone || ','
& && && && && && & || pany_info_name || ','
& && && && && && & || pany_info_address || ','
& && && && && && & || pany_info_phone || ','
& && && && && && & || pany_info_manager || ','
& && && && && && & || pany_info_createdate || ','
& && && && && && & || pany_info_mobile || ')';
& & execute immediate v_
end message_
论坛徽章:482
不要在程序里创建DBLINK。
应该事先创建好,程序里只是使用。
因此你完全没有必要用动态SQL。
你的错误从pany_info_phone 开始,这些全部得加上引号变成字符串。
认证徽章论坛徽章:40
本帖最后由 bfc99 于
09:34 编辑
把execute immediate v_注释掉,然后加一行dbms_output.put_line(v_insert);
执行后看看输出的代码哪里有问题。
p_rowCompany COMPANY_REGISTER_INFO%
&&select * into p_rowCompany from COMPANY_REGISTER_INFO;&& --表 COMPANY_REGISTER_INFO 中只有一行吗?
论坛徽章:394
要是单引号双写麻烦,就用10g的q['& && && &']写法
论坛徽章:0
bfc99 发表于
把execute immediate v_注释掉,然后加一行dbms_output.put_line(v_insert);
执行后看看输出的代 ...
恩,表中确实只有一行数据.每次向表中插入数据之前,会先将表的数据清空,然后插入.
经过N长时间的分析,问题是Date类型数据插入时少了引号........... 有什么解决办法吗?
论坛徽章:0
newkid 发表于
不要在程序里创建DBLINK。
应该事先创建好,程序里只是使用。
因此你完全没有必要用动态SQL。
业务需求就是动态创建dblink,这个没法改变,至于你后面说的,确实是pany_info_createdate变量值 即Date类型,这个插入时有问题,没有引号.....
论坛徽章:0
newkid 发表于
不要在程序里创建DBLINK。
应该事先创建好,程序里只是使用。
因此你完全没有必要用动态SQL。
业务需求就是动态创建dblink,这个没法改变,至于你后面说的,确实是pany_info_createdate变量值 即Date类型,这个插入时有问题,没有引号.....
认证徽章论坛徽章:40
killerAss 发表于
业务需求就是动态创建dblink,这个没法改变,至于你后面说的,确实是pany_info_createdate变 ...
|| pany_info_createdate || ','
论坛徽章:0
bfc99 发表于
|| pany_info_createdate || ','
恩,感觉其变量的值 各种缺逗号,也不知道有什么好的解决办法,这个和表的字段类型有关吗? VARCHAR VARCHAR2??
论坛徽章:394
killerAss 发表于
业务需求就是动态创建dblink,这个没法改变,至于你后面说的,确实是pany_info_createdate变 ...
业务人员怎么会知道dblink
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号sql语句大全之使用INSERT VALUES语句
来源:未知
使用INSERT&& &VALUES语句
语句是SQL语句中最常用的用于向数据表中插入数据的方法,使用INSERTINSERT语句可向表中添加一个或多个新行。INSERT语句的使用很简单,其基本的语法格式如下所示:
INSERT [INTO] table_or_view [(column_list)] VALUES data_values
上述语句中个参数的说明如下所示:
l&& table_or_view& 用于指定向数据表中添加数据的表或视图名称。
l&& column_list& 用于指定该数据表的列名,可以指定一列或多列,所有这些列都必须放在圆括号()中。如果要指定多个列时,各列必须用逗号隔开。如果指定了列名,那么在目标数据表中所有未被指定的列必须支持空值或者默认值。
l&& data_values& 用于指定向数据表中插入的数据值。这些值也必须放在圆括号内,如果指定的值为多个时,这些值之间也必须用逗号隔开。如果指定了列名,那么该数据必须与各列一一对应。如果没有指定列名,该数据必须与数据表中各列的顺序一一对应。
&&&&&&&&&&& 例如,在&网店购物系统&数据库中,新增加了一台笔记本电脑,现在要把该商品的信息插入到&商品信息&表中,详细的SQL语句如下所示:
USE 网店购物系统
INSERT INTO 商品信息 VALUES('','华硕电脑U20A','2000','10')
参照原有数据表的结构,可以知道,主要包括&商品编号&、&商品名称&、&商品价格&、&库存数量&四列,同样,新插入的一行,数据值必须与数据表定义时给出的列名的顺序完全相同,并不用再指明每列的列名。
执行上面的语句,可以得到如图6-1所示的结果。
图6-1& 插入新数据
通过插入数据后返回结果,表明数据已经成功添加进入数据表中。此时,大家可以通过前面学习的查询语句,到数据表中,找到新插入的数据行。具体的语句如下所示:
USE 网店购物系统
SELECT * FROM 商品信息
WHERE 商品名称 = '华硕电脑U20A'
执行该语句,将得到如图6-2所示的查询结果。
图6-2& 查找新数据行
在插入数据时,如果遗漏了列表和数值表中的一列,那么当该列存在默认值时,将使用默认值。如果该列不存在默认值时,SQL Server将尝试补一个空值。如果该列声明了NOT NULL,那么将会导致插入出错。
-----------有关log4j的ORA-00917: 缺失逗号 问题
40HouZhenDong123]
有关log4j的ORA-00917: 缺失逗号 问题
40HouZhenDong123]
编辑:www.fx114.net
本篇文章主要介绍了"有关log4j的ORA-00917: 缺失逗号 问题
40HouZhenDong123]",主要涉及到有关log4j的ORA-00917: 缺失逗号 问题
40HouZhenDong123]方面的内容,对于有关log4j的ORA-00917: 缺失逗号 问题
40HouZhenDong123]感兴趣的同学可以参考一下。
错误代码如下:
&&&&&&&&&log4j:ERROR&Failed&to&excute&sql
&&&&&&&&&java.sql.SQLException:&ORA-00917:&缺失逗号
at&oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at&oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at&oracle.jdbc.ttc7.Oall7.receive(Oall7.java:590)
at&oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1973)
at&oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1119)
at&oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2191)
at&oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:2064)
at&oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2989)
&&&&&&&&&····
log4j.properties配置如下:
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.BufferSize=1
log4j.appender.DATABASE.driver=oracle.jdbc.driver.OracleDriver
log4j.appender.DATABASE.URL=jdbc:oracle:thin:@192.168.0.127:1521:oracle11g
log4j.appender.DATABASE.user=*****
log4j.appender.DATABASE.password=*****
log4j.appender.DATABASE.sql=insert&into&LOGMESSAGE(LogId,Class,Method,createTime,LogLevel,MSG)&values&(HIBERNATE_SEQUENCE.Nextval,'%C','%M','%d{yyyy-MM-dd&HH:mm:ss}','%p','%m')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
求教各位大神自己顶一个java.sql.SQLException:&ORA-00917:&缺失逗号
这个是你操作oracle的sql语句有问题啊,提示你缺少逗号insert&into&LOGMESSAGE(LogId,Class,Method,createTime,LogLevel,MSG)&values&(HIBERNATE_SEQUENCE.Nextval,'%C','%M','%d{yyyy-MM-dd&HH:mm:ss}','%p','%m')
反复仔细的看过好多遍没发现有什么问题createTime&在数据库中是Date&类型不引用&3&楼&stevenzxl&的回复:insert&into&LOGMESSAGE(LogId,Class,Method,createTime,LogLevel,MSG)&values&(HIBERNATE_SEQUENCE.Nextval,'%C','%M','%d{yyyy-MM-dd&HH:mm:ss}','%p','%m')
反复仔细的看过好多遍没发现有什么问题
恩,所以我很纠结引用&4&楼&pipi517&的回复:createTime&在数据库中是Date&类型不
是的看看实际插入的数据是不是包含了特殊符号,需要转义的引用&7&楼&lyon_z&的回复:看看实际插入的数据是不是包含了特殊符号,需要转义的
Pre-instantiating&singletons&in&org.s477f7c:&defining&beans&[indexController,loginController,registerController,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0,org.springframework.format.support.FormattingConversionServiceFactoryBean#0,org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter#0,org.springframework.web.servlet.handler.MappedInterceptor#0];&parent:&org.s1a462c9各位大神之前没遇到过类似的问题么?指点儿一下哈我的意思是你的语句
insert&into&LOGMESSAGE(LogId,Class,Method,createTime,LogLevel,MSG)&values&(HIBERNATE_SEQUENCE.Nextval,'%C','%M','%d{yyyy-MM-dd&HH:mm:ss}','%p','%m')
里面的变量的值有没有特殊字符,比如%m里面是不是有单引号或者其他需要转义的引用&10&楼&lyon_z&的回复:我的意思是你的语句
insert&into&LOGMESSAGE(LogId,Class,Method,createTime,LogLevel,MSG)&values&(HIBERNATE_SEQUENCE.Nextval,'%C','%M','%d{yyyy-MM-dd&HH:mm:ss}','%p','%m')
里面的变量的值有没有特殊字符,比如%m里面是不是有单引号或者其他需要转义的
表里五个字段,前四个字段数据库中的值是正常的,最后一个字段(MSG)的内容如上,就是刚才发的那一段话引用&10&楼&lyon_z&的回复:我的意思是你的语句
insert&into&LOGMESSAGE(LogId,Class,Method,createTime,LogLevel,MSG)&values&(HIBERNATE_SEQUENCE.Nextval,'%C','%M','%d{yyyy-MM-dd&HH:mm:ss}','%p','%m')
里面的变量的值有没有特殊字符,比如%m里面是不是有单引号或者其他需要转义的
表中MSG字段,还有一条语句如下:貌似有转移字符哈
Loading&XML&bean&definitions&from&ServletContext&resource&[/WEB-INF/spring/appServlet/servlet-context.xml]解决了,将log4j的级别改成WARN就OK了,不知道为什么···给你个小提示,%在SQL语句里代表什么?是编码的冲突,你吧%m删除看看,或者你可以尝试转义%
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:

我要回帖

更多关于 缺失逗号 的文章

 

随机推荐