问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle数据库报错“ora-01722:invalid number”,怎么解决?

发布网友 发布时间:2022-04-07 17:30

我来回答

1个回答

热心网友 时间:2022-04-07 18:59

数据库表中有一个varchar2类型的字段,里边可能包含数字或用逗号分隔的数据,如3或4,5这样的值,查询时,只传入了一个数字,也就是不带逗号的参数。因此sql语句类似这样:

select * from ct where nos = 3

语句本身一看就知道会出问题,因为3没加引号,会被当作数字处理。这样就肯定会报ORA-01722: invalid number的错误:

SQL Error: 1722, SQLState: 42000

ORA-01722: invalid number

但在用hibernate时,为了避免数字问题,我们经常会这样写hsql语句:

String sql = 'select * from ctEntity as ct where ct.Nos = ''+no+''';

当传入参数no为‘4,5’时,可能不会报错,但当no为'4'或'5'时,也就是单个数字时,就会报错了。经过打印hibernate的语句,发现单个数字时,hibernate会把上述语句转义成这样:

select ct.Nos from ctEntity as ct where ct.Nos=4

也就是会忽略掉引号,这样数据库就会报错,因为varchar2类型的nos字段在查询时给转义成了数字,所以肯定报错了。

这种情况下,hsql语句就不能用 ct.Nos = ' ***'这样的写法,必须用like,如ct.Nos like '%no%',这样才不会报错。当然完整的查询语句要考虑逗号的前、后以及没有逗号的情况,那就自己考虑了。

1、xxx.txt

文本内容:

XXXXXXXXXXXX XXXXX XXXXXXXXX X X X X XXXX

XXXXXXXXXXXX XXXXX XXXXXXXXX X X X X XXXX

2、XXX.ctl

....................................

INTO TABLE XXX_XXX_XXX -- 要插入记录的表

Fields terminated by ' ' -- 数据中每行记录用 空格 分隔

trailing nullcols --表的字段没有对应的值时允许为空

(

REQUEST_ID,

REQUEST_TIME DATE 'YYYYMMDDHH24MISS',

REQUEST_SOURCE INTEGER EXTERNAL ,

BUSINESS_TYPE INTEGER EXTERNAL ,

PAY_TYPE INTEGER EXTERNAL ,

CARD_WHOLECOUNT INTEGER EXTERNAL,

CARD_WHOLEVALUE INTEGER EXTERNAL,

PAY_AMOUNT INTEGER EXTERNAL

)

3、利用sqlloader导入会出现ORA-01722:invalid number问题;

原因:换行符的存在,如果integer或者number类型的栏位位于表的最后,最后其实会有CR/LF的换行符,在用sqlldr导入时会把换行符也算作那个数字的一部分,使得对应的导入PAY_AMOUNT 的值与PAY_AMOUNT在数据库中定义的NUMBE R(8)类型不匹配,从而出错。解决办法加integer或者加“TERMINATED BY WHITESPACE”。

即:

trailing nullcols --表的字段没有对应的值时允许为空

(

REQUEST_ID,

REQUEST_TIME DATE 'YYYYMMDDHH24MISS',

REQUEST_SOURCE INTEGER EXTERNAL ,

BUSINESS_TYPE INTEGER EXTERNAL ,

PAY_TYPE INTEGER EXTERNAL ,

CARD_WHOLECOUNT INTEGER EXTERNAL,

CARD_WHOLEVALUE INTEGER EXTERNAL,

PAY_AMOUNT INTEGER EXTERNAL TERMINATED BY WHITESPACE

)

注:在实际工程项目中,其实要导入9个字段,最后一个字段为导入时间,于是相应的在数据库中创表时,默认导入时间值为SYSDATE

IMPORT_DATE DATE DEFAULT SYSDATE

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 买柚子时!怎么区分里面的肉好与不好 核电概念股一览2014 核电概念股有哪些 核电概念股一览表 吉电股份近期走势如何,我赔惨了 南昌有什么好的妇科医院 江西妇科医院排行榜 微信绑定银行卡必须是手机银行卡银行 是用冷水还是用热水来搅拌腌咸鸭蛋的黄泥 桑蚕丝被什么品牌好? 王者荣耀哪个射手单挑最厉害? 王者荣耀什么英雄单挑最厉害 微信商业版需要绑定什么银行卡?- 问一问 《王者荣耀》中到底谁单挑最厉害 王者荣耀哪个人物单挑厉害 王者荣耀老夫子单挑厉害还是铠单挑厉害? 王者荣耀3v3地图1v2单挑最厉害的英雄? 你认为王者的哪个英雄单挑是最强的? 赌气和朋友玩王者荣耀1v1,有什么单挑必赢的英雄吗? 如何做糖醋排骨呢? 王者荣耀中哪些战士单挑能力非常强? 星期天,小明做完作业后准备和妈妈一起做午饭.妈妈告诉他,午饭除了米饭外,还准备做家常豆腐、糖醋排骨 吃柚子有什么不好的吗 dst上原始分和智龄是什么意思 原始分和智龄怎么看 智力年龄怎么计算? cad中怎么打开三维建模 心理测验的解释报告 检验报告单【中枢神经障碍】 智商分数段具体怎样划分? CAD怎么打开三维建模 IQ的分数是怎样计算的呢? 智力残疾分为哪几个等级 汇编题--》已知x,y,z,v,是16位带符号数,计算(v-(x+y+z-540))/x 用汇编语言编写一个程序,计算(X*Y-Z)/X的值。其中X,Y,Z均为16位带符号数,要求表达式的计算结果存放在数 请问加勒比海盗里面的那只猴子是什么品种呀!……… 汇编(V-(X*Y+Z-540))/X 试编写一个汇编语言程序段,计算(W—(X×Y+Z—540))/X。其中X、Y、Z、W均为16位带符号数 有多少人不喜欢用马桶 微机原理与汇编语言 x=3,y=6,z=80,计算表达式 ((x+y))×4-z)÷30 汇编语言计算 (X+(Y*Z-100)/W 《羽林铠皇》txt下载在线阅读全文,求百度网盘云资源