在java应用程序中,我从oracle数据库中选择数值。我需要知道所选值的逗号右边的位数,所以我使用了getScale()
类的ResultSetMetaData
方法。只要我在select
语句中不使用min,max等聚合函数,这种方法就可以正常工作。当使用最小或最大getScale()
次返回时,ColumnType
仍然与列值相同(NUMERIC)
。
任何想法可能是什么原因?此外,我还在寻找一种不太尴尬的解决方法。
我们使用:oci driver, Java 6, Oracle 10g
答案 0 :(得分:1)
通常,任何表达式都是未知的。例如,数字列的AVG
不能依赖列的原始比例。由客户来处理。除非你有实际价值,否则你怎么知道SUM
的精确度?同样,在通过RTRIM
或REPLACE
函数后返回的字符串的长度是多少?在查看整个结果集的实际值之前,您无法知道。
也许在SQL本身,您可以知道适当的比例是多少。此问题建议使用cast
到适当的类型。
ResultSetMetaData getScale returns 0
在您的情况下,您询问的是min
和max
。这些特殊之处在于它们保持了色谱柱的规模和精度。也许不是在司机,但从逻辑上讲,他们这样做。如果必须知道比例,您可以使用java.sql.DatabaseMetadata
方法查看列本身的元数据而不是结果集的元数据。