我正在使用Oracle的JDBC瘦驱动程序(10.2.0.3)连接到Oracle 10g数据库。我想获取有关数据库列的信息,所以我使用ResultSetMetaData。我需要的最重要的信息是列的类型和长度,因此我使用getColumnTypegetPrecisiongetScale方法。

如果列类型像select * from tablename一样“简单”,则它适用于简单查询(VARCHAR2(50), NUMBER(5), NUMBER(6,2))。如果我有一个更复杂的查询(select count(*) from tablename)或一个基于包含一些复杂计算的视图的查询,则这些方法会给出奇怪的结果,例如:

  • getScale:-127
  • getPrecisiongetScale均为0
  • getPrecision:-1

  • oracle.jdbc.J2EE13Compliant连接属性设置为true(由多个网页建议)可以消除getScale = -127,但仍返回0/0结果。

    很可能我必须为这些怪异的结果创建一种解决方法,但是首先,我至少需要有关Oracle ResultSetMetaData行为的全面文档。例如,对于所有SQL类型来说,一个具有getPrecision / getScale含义的巨大表将是很好的。某处有这样的文档吗?

    最佳答案

    由于未明确声明,Oracle无法基于视图或count(*)返回类型。您的视图可以返回任何精度或比例,具体取决于视图的基础表格。

    为了克服这个问题,您需要像这样在查询或视图中强制转换类型:

    select CAST (count(*) AS NUMBER(30))
    

    09-28 14:33