当使用min或max等聚合函数时,resultsetmetadata.getScale()返回0

时间:2012-07-19 18:29:31

标签: java oracle jdbc metadata

在java应用程序中,我从oracle数据库中选择数值。我需要知道所选值的逗号右边的位数,所以我使用了getScale()类的ResultSetMetaData方法。只要我在select语句中不使用min,max等聚合函数,这种方法就可以正常工作。当使用最小或最大getScale()次返回时,ColumnType仍然与列值相同(NUMERIC)

任何想法可能是什么原因?此外,我还在寻找一种不太尴尬的解决方法。

我们使用:oci driver, Java 6, Oracle 10g

1 个答案:

答案 0 :(得分:1)

通常,任何表达式都是未知的。例如,数字列的AVG不能依赖列的原始比例。由客户来处理。除非你有实际价值,否则你怎么知道SUM的精确度?同样,在通过RTRIMREPLACE函数后返回的字符串的长度是多少?在查看整个结果集的实际值之前,您无法知道。

也许在SQL本身,您可以知道适当的比例是多少。此问题建议使用cast到适当的类型。

ResultSetMetaData getScale returns 0

在您的情况下,您询问的是minmax。这些特殊之处在于它们保持了色谱柱的规模和精度。也许不是在司机,但从逻辑上讲,他们这样做。如果必须知道比例,您可以使用java.sql.DatabaseMetadata方法查看列本身的元数据而不是结果集的元数据。