【问题标题】:ResultSetMetaData getScale returns 0ResultSetMetaData getScale 返回 0
【发布时间】:2011-07-18 06:31:45
【问题描述】:

我有一个名为 RATE_HISTORY 的表,其中有一个名为 RATE 的字段。
RATE 字段的比例为 18。
我正在使用 ResultsetMetaData 在 Oracle 11.2 上获取此表中列的元数据。
我在我的代码中执行以下查询:

select (RATE * 100) from RATE_HISTORY

当我执行metadata.getScale() 时,它返回 0。但是,如果我执行此查询:

select RATE from RATE_HISTORY

getScale 返回正确的值 (18)。
有没有办法在oracle中将两个数字相乘并保持比例?

【问题讨论】:

    标签: java oracle jdbc


    【解决方案1】:

    在选择中投射结果也应该起作用,缺点是您必须从列定义中重复比例:

    select cast(RATE * 100 as number(30, 18)) from RATE_HISTORY
    

    【讨论】:

      【解决方案2】:

      我怀疑发生这种情况是因为比例是表列的工件,而不是数据本身。当您从列值派生一个值时,您会丢失该元数据。

      如何使用

      select RATE, (RATE * 100) from RATE_HISTORY
      

      您可以从第一列获取比例,从第二列获取计算。

      当然,或者只是在 java 中进行乘法运算。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-15
        • 1970-01-01
        • 2015-06-21
        • 2016-10-28
        • 2019-02-20
        相关资源
        最近更新 更多