代码之家  ›  专栏  ›  技术社区  ›  asalamon74

Oracle结果元数据getPrecision/getScale

  •  3
  • asalamon74  · 技术社区  · 17 年前

    我正在使用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
    • 获取精度 : -1

    设定 oracle.jdbc.J2EE13Compliant true (正如几个网页所建议的)消除了getScale=-127,但仍然返回0/0结果。

    6 回复  |  直到 17 年前
        1
  •  1
  •   tuinstoel    17 年前

    另一种方法是查询 user_tab_columns 或 all_tab_columns

        2
  •  1
  •   Vincent Malgrat    17 年前

    可以接受0的刻度:数字(5)与数字(5,0)相同

    但是,定义精度时,精度必须是介于1和38之间的整数。当它未定义时(如数字),驱动程序必须返回某些内容,因为它不能返回null。在这种情况下,驱动程序选择返回0。

        3
  •  1
  •   rics    17 年前

    在我看来,似乎没有关于ResultSetMetaData的全面文档。 Oracle® Database JDBC Developer's Guide and Reference 10g Release 2 (10.2) 和 11g Release 2 (11.2) 给出了有关列名和类型的示例 here ,它们不涉及其他方面。

    a similar problem 几年前与PostgreSQL合作,他制作了一个补丁。也许Oracle在这里使用相同的代码库。

    您可以尝试使用ojdbc14 .jar而不是ojdbc14.jar,因为它的类是用“javac-g”编译的,并且包含一些跟踪信息。

    newer drivers .

        4
  •  1
  •   user1834844    13 年前

    rs.getBigDecimal(columnIndex) 从大小数点可以得到特定列的精度/比例值。

        5
  •  1
  •   Math user2900037    12 年前

    Oracle无法返回基于视图或 count(*) 因为它没有明确声明。根据视图的参考底图表,视图可以返回任何精度或比例。

    select CAST (count(*) AS NUMBER(30))
    
        6
  •  0
  •   Michał Niklas    17 年前

    不是对您的问题的直接回答,而是您提到的一种解决方法:

    Reverse Engineering a Data Model . 我在实用程序中使用它将这些信息导出为文本

    推荐文章