0

在 java 应用程序中,我从 oracle 数据库中选择数值。我需要知道所选值的逗号右边的位数,所以我使用了Class的getScale()方法。ResultSetMetaData只要我在我的select声明中不使用诸如 min、max... 之类的聚合函数,这种方法就可以正常工作。使用 min 或 maxgetScale()时返回 0。ColumnType仍然与(NUMERIC)列值相同。

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

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

4

1 回答 1

1

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

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

ResultSetMetaData getScale 返回 0

在你的情况下,你问的是minand max。它们的特殊之处在于它们保持了色谱柱的比例和精度。也许不在驱动程序中,但从逻辑上讲,它们确实如此。如果您必须知道比例,则可以使用方法查看列本身的元数据,而不是结果集的元数据java.sql.DatabaseMetadata

于 2012-07-20T03:56:57.833 回答