oracle ORA-01722:间歇性无效号码

odopli94  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(150)

我们有一个SQL查询,它有一个如下的条件。
结果值<> 0
result_value是Oracle EBS数据库中的varchar列。该查询在大多数情况下工作正常。但它随机抛出下面的错误。
[错误]执行(216:33):ORA-01722:数无效
将条件result_value <> TO_CHAR('0')更改为使其在出错时工作。
为什么系统会这样?下面是结果的屏幕截图。字母数字列是regexp_like(result_value,'^-?\d+(.\d+)?$(E(+|- )\d+)?$')then 'numeric' else 'alpha' end alphanumeric

ct3nt3jp

ct3nt3jp1#

在Oracle 12中,您可以使用TO_NUMBER(result_value DEFAULT NULL ON CONVERSION ERROR),然后可以与数字进行比较,并且可能不需要正则表达式:

SELECT result_value
FROM   table_name
WHERE  TO_NUMBER(result_value DEFAULT NULL ON CONVERSION ERROR) <> 0

其中,对于样本数据:

CREATE TABLE table_name (result_value) AS
SELECT '0' FROM DUAL UNION ALL
SELECT '0E0' FROM DUAL UNION ALL
SELECT '0.0' FROM DUAL UNION ALL
SELECT '0E+0' FROM DUAL UNION ALL
SELECT '0.0E-1234' FROM DUAL UNION ALL
SELECT '1' FROM DUAL UNION ALL
SELECT 'ABC' FROM DUAL;

输出:
| 结果_值|
| --|
| 1 |

  • 注意:使用result_value <> '0'只会排除样本数据中的一行,实际上有5行的数值与0相同。*

fiddle

相关问题