oracle01722(oracle01722无效数字)

本篇文章给大家谈谈oracle01722,以及oracle01722无效数字对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

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

数据库表中有一个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

Oracle报错ORA-01722: 无效数字排查解决方案

在做报表系统的过程中,遇到了一个很有意思的问题,就是Oracle报了一个错 java.sql.SQLException: ORA-01722: 无效数字 ,正常来说,报该错就意味着数据类型不匹配,但是因为同一sql语句,多加了一个条件,就查出结果,不加条件,反而报错,所以就意味着,可能数据有误(或者语句有误),但是哪一条数据有误,肉眼难以识御纤迹别!

有一个机构表,存10个机构, is_use=‘0’ 意味着无效,不统计, is_use=‘1’ 意味着有效,参与统计,先看sql:

这个是公共的sql部分,往后添加条件,即可查竖凯相应结果:

查昆明能查出结果,但是查云南的时候,就报错,所以一怒之下,把ynCheckSql语句结果查出来,一条一条检验,还真发现了问题:

针对德宏这一个地方,查询的时候报了 ORA-01722: 无效数字 错误,仔细查看数据源,发现数据也没什么问题,因为计算过程中,会报除数不能为0的错,而该条数据有一个值( 该值是分母,也就是除数 ),我们都知道,除数不能为0,所以Oracle针对除数为0的情况,有一个函数:

所以为了直接返回结果,除数为0时直接返回镇并 - 如这个sql语句: ROUND(DECODE(ba.personal_plan,0,'-',(r.p5_year_inc+r.p6_year_inc+r.p7_year_inc+r.p8_year_inc+r.p9_year_inc+r.p10_year_inc)/ba.personal_plan*100),3) perPlan

我们都知道ROUND函数是保留小数位数,如果返回 - ,ROUND函数肯定会包无效数字错误,所以如果除数为0,直接返回特殊字符9999即可,后面再对9999进行单独处理!!

Oracle数据库查询,一直报错ORA-01722: 无效数字

你罩迅看一下物做此胡辩,billion应该有非数字的内容

转成字符进行比较

select * from A,B where to_char(A.CourseNum)=B.billon;

[img]

ora-01722怎么办

出现ORA-01722和ORA-27010的原因是多方面的:主要是oracle当岁猜前的服务不可用,shared memory realm does not exist,是因为oracle没有启动或没有正常启动,共享内存并没有分配给当前实例.所以,通过设置实例名,扒汪再用操作系统身份验证的方式,启动数据库。这样数据库就正春雀仔常启动了,就不会报ORA-01034和ORA-27101两个启动异常了。

还有就是可能是登录数据库后,不正常的退出,比如直接关掉窗口,而这时数据库里有未完成的动作,再次登录时就会提示“insufficient privileges”的报错,SQLshutdown immediate; SQLstartup;就恢复正常了。

最后可能你虚拟机的共享内存问题,看下数据库的配置文件是否对应了512M内存?还是你设置的大了,本身给的不足

关于oracle01722和oracle01722无效数字的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

相关阅读

  • oraclesupport(Oracle support identifier)

    oraclesupport(Oracle support identifier)

    简介:Oracle Support是Oracle公司提供的一项重要的技术支持服务,旨在帮助客户解决Oracle软件产品在使用过程中遇到的问题,提高系统的稳定性和性能。本文将介绍Oracle Support的重要性以及具体的使用方法。一、Or...

    2024.04.17 09:55:21作者:intanet.cnTags:oraclesupport
  • hivetez(hive特征工程)

    hivetez(hive特征工程)

    标题:探索Hivetez的未来简介:Hivetez是一家领先的IT技术公司,在区块链和加密货币领域有着深厚的技术积累。本文将探索Hivetez在IT技术领域的未来发展方向和创新技术。一、区块链技术的应用Hivetez致力于将区块链技术应用于...

    2024.04.17 07:22:22作者:intanet.cnTags:hivetez
  • mysql或的简单介绍

    mysql或的简单介绍

    MySQL数据库简介MySQL是一种开源的关系型数据库系统,广泛应用于Web应用程序的开发中。它支持多种操作系统,包括Windows、Linux和Mac OS等,同时也支持多种编程语言,如PHP、Java和Python。MySQL具有高性能...

    2024.04.17 06:55:17作者:intanet.cnTags:mysql或
  • redis创建表(redis创建表命令)

    redis创建表(redis创建表命令)

    简介:Redis是一种内存数据库,广泛应用于缓存和消息传递等领域。在使用Redis进行开发时,我们经常需要创建表来存储数据。本文将介绍如何在Redis中创建表。一级标题:如何在Redis中创建表二级标题:连接Redis数据库首先,我们需要连...

    2024.04.16 12:55:11作者:intanet.cnTags:redis创建表
  • mongodbapi的简单介绍

    mongodbapi的简单介绍

    MongoDB是一种开源的NoSQL数据库管理系统,它具有高性能、高可用性和可伸缩性的特点,能够处理大量的非结构化数据。MongoDB提供了一套丰富的API,允许开发人员在应用程序中使用各种编程语言来操作和管理数据库。# 什么是MongoD...

    2024.04.16 12:44:25作者:intanet.cnTags:mongodbapi
  • redis3(redis30集群)

    redis3(redis30集群)

    简介:Redis是一种开源的高性能键值存储数据库,常用作缓存、消息队列、排行榜等场景。Redis3是Redis的一个重要版本,它带来了许多新的特性和性能优化,使得Redis在大规模应用中表现更加出色。本文将介绍Redis3的一些重要特性和使...

    2024.04.16 12:22:11作者:intanet.cnTags:redis3
  • db-3(db3双向触发二极管好坏的测量)

    db-3(db3双向触发二极管好坏的测量)

    IT技术在当今社会中扮演着重要的角色,它贯穿着各个行业和领域,为我们的生活带来了巨大的便利和发展。本文将介绍关于数据库技术的知识和应用,探讨数据库技术在IT领域中的重要性和作用。# 数据库技术的概念和分类数据库技术是指通过计算机系统来管理和...

    2024.04.16 11:55:16作者:intanet.cnTags:db-3
  • oracle中sysdate(oracle中sysdate返回多个日期)

    oracle中sysdate(oracle中sysdate返回多个日期)

    标题:Oracle中sysdate的用法简介:在Oracle数据库中,sysdate是一个函数,可用于获取当前的系统日期和时间。它常用于数据库操作中,例如插入、更新数据时记录操作的时间。一、sysdate函数的语法sysdate函数的基本语...

    2024.04.16 08:44:11作者:intanet.cnTags:oracle中sysdate