如何避免OpenEdge数据库中无效的数字字符串错误?



我正在访问一个11.7 OE Enterprise RDBMS。我有两个简单的查询,一个可以工作,另一个不能。在下面的查询中,LAB_VALUE字段是一个varchar数据类型。第一个查询返回106行,没有任何问题。第二个查询立即终止。

查询1;

SELECT to_number(LAB_VALUE) LAB_VALUE 
FROM labrec_view
WHERE lab_yr_mon = 202006 AND 
FACILITY_CODE = 'BUF' AND 
LAB_RESULT_CODE = 'ALBUMIN'

Query2;

SELECT to_number(LAB_VALUE) LAB_VALUE 
FROM labrec_view
WHERE lab_yr_mon = 202006 AND 
FACILITY_CODE = 'BUF' AND 
LAB_RESULT_CODE = 'ALBUMIN' and
to_number(LAB_VALUE) > 4 

收到的错误是;

SQLState=HY000
ErrorCode=-20232
[DataDirect][OpenEdge JDBC Driver][OpenEdge] Invalid number string (7498)

我很茫然。有一篇KB的文章;

https://knowledgebase.progress.com/articles/article/invalid返回字符串- 7498数量- - sql查询在oe - 10 - 2 b

但它似乎指的是旧版本的OpenEdge,并特别指出11.7应该纠正这个问题。

我不是Progress DB人员,我只能作为特定的R/O用户访问数据库中的查询视图。

在故障排除中我该怎么做?

编辑:有人建议to_number(在where子句中)可能会导致问题,因为我看不到的一些数据可能不是数字。所以我使用了下面的查询,得到了相同的错误结果;

SELECT LAB_VALUE_TEST
from 
(
SELECT to_number(LAB_VALUE) LAB_VALUE_TEST 
FROM labrec_view
WHERE lab_yr_mon = 202106 AND 
FACILITY_CODE = 'BUF' AND 
LAB_RESULT_CODE = 'ALBUMIN'
) iq
WHERE iq.LAB_VALUE_TEST >4;

猜测,因为您使用的是表达式("to_number(LAB_VALUE)>4")必须检查LAB_VALUE字段,看它是否大于4

if there "where"短语没有短路,那么必须检查所有labrec记录,并且可能有一些数字

的值无效。

相关内容

最新更新