我在查询中有一个条件:
ABS ( FIB.QUANT1 ) = ( OI.KLINE * :intv1000 ) / 1000.000000当我使用intv1000 = 1000000运行查询时-查询运行正常。
当我使用intv1000 =1000时运行查询时,我得到ORA-01722 (大约5-6秒之后,不是立即)。
知道为什么吗?
QUANT1 - NUMBER(16,2) KLINE - NUMBER(38)
条件是从应用程序自己生成的,所以我不能真正更改它。
谢谢
发布于 2020-12-02 21:12:07
ORA-01722是无效的数字错误。
当必须将非数字--通常是字符串--转换为数字时,会出现此错误。例如here。
这种转换可以通过许多不同的方式进行,但最常见的有三种:
to_number()cast()您突出显示的表达式可能与错误实际发生的位置有关,也可能与错误实际发生的位置无关。它所说的是:
:intv1000 = 1000000,则包含问题数据的行将被过滤掉。intv1000 = 1000,则将处理包含问题数据的行。啊哈。这是很难确定的。我建议首先查看查询并查找所有显式转换,看看它们是否存在问题。
如果找不到back数据,则需要查看所有比较(包括连接)、算术表达式和函数调用来查找问题。
一般来说,我强烈建议避免隐式转换。使用显式转换来避免这样的问题!注意:对于使用字符串函数和运算符转换为字符串,我做了一个例外。这些通常是非常安全的。
https://stackoverflow.com/questions/65104243
复制相似问题