我正在使用Oracle的JDBC瘦驱动程序(10.2.0.3)连接到Oracle 10g数据库。我想获取有关数据库列的信息,所以我使用ResultSetMetaData。我需要的最重要的信息是列的类型和长度,因此我使用getColumnType,getPrecision和getScale方法。
如果列类型像select * from tablename
一样“简单”,则它适用于简单查询(VARCHAR2(50), NUMBER(5), NUMBER(6,2)
)。如果我有一个更复杂的查询(select count(*) from tablename
)或一个基于包含一些复杂计算的视图的查询,则这些方法会给出奇怪的结果,例如:
getScale
:-127 getPrecision
和getScale
均为0 getPrecision
:-1 将
oracle.jdbc.J2EE13Compliant
连接属性设置为true
(由多个网页建议)可以消除getScale = -127,但仍返回0/0结果。很可能我必须为这些怪异的结果创建一种解决方法,但是首先,我至少需要有关Oracle ResultSetMetaData行为的全面文档。例如,对于所有SQL类型来说,一个具有getPrecision / getScale含义的巨大表将是很好的。某处有这样的文档吗?
最佳答案
由于未明确声明,Oracle无法基于视图或count(*)
返回类型。您的视图可以返回任何精度或比例,具体取决于视图的基础表格。
为了克服这个问题,您需要像这样在查询或视图中强制转换类型:
select CAST (count(*) AS NUMBER(30))