【问题标题】:What Java data type corresponds to the Oracle SQL data type NUMERIC/DECIMAL and get equivalent Java code for PLSQL?什么 Java 数据类型对应于 Oracle SQL 数据类型 NUMERIC/DECIMAL 并获得 PLSQL 的等效 Java 代码?
【发布时间】:2015-12-27 01:38:08
【问题描述】:

我正在寻找与 Oracle SQL 数据类型 NUMERIC/DECIMAL 对应的 Java 数据类型。

我从网络和其他文档中获得了同样推荐使用 java.math.BigDecimal 的信息。查看一份文件。

http://www.cis.upenn.edu/~bcpierce/courses/629/jdkdocs/guide/jdbc/getstart/mapping.doc.html

DECIMAL 和 NUMERIC 类型的推荐 Java 映射是 java.math.BigDecimal,一种 Java 类型,也表示定点 具有绝对精度的数字。 java.math.BigDecimal 类型 提供数学运算以允许添加 BigDecimal 类型, 与其他 BigDecimal 类型相减、相乘和相除,其中 整数类型,以及浮点类型。

检索 DECIMAL 和 NUMERIC 值的推荐方法是 结果集.getBigDecimal。 JDBC 还允许访问这些 SQL 类型 简单的字符串或字符数组。因此,Java 程序员可以使用 getString 接收 DECIMAL 或 NUMERIC 结果。然而,这使得 DECIMAL 或 NUMERIC 用于货币值的常见情况 相当尴尬,因为这意味着应用程序编写者必须 对字符串进行数学运算。也可以检索这些 SQL 类型为任何 Java 数字类型。

我的最终目标是将 Oracle PLSQL 逻辑转换为等效的 Java 代码。我试图用示例逻辑来解释。

参见下面的示例:

在甲骨文中

DECLARE
    inv_quantity_Balance DECIMAL(10,2);
BEGIN

WHEN (inv_quantity_Balance <= 1) THEN
      inv_quantity_Balance := 2;
ELSE
      inv_quantity_Balance := 3;
END;

Java:

BigDecimal  inv_quantity_Balance  = null ;
if ((inv_quantity_Balance <= 1)) {
    inv_quantity_Balance = 2 ;
}else {
    inv_quantity_Balance = 3 ;
}  

它显示编译器错误:

The operator <= is undefined for the argument type(s) BigDecimal, int
Type mismatch: cannot convert from int to BigDecimal

这只是一个示例。 请帮我找到相同的java等效项。如何保持精度和比例等?

【问题讨论】:

    标签: java oracle transformation type-conversion


    【解决方案1】:

    Oracle的NUMERIC和DECIMAL确实可以映射到java.math.BigDecimal

    您遇到的错误与此映射无关。这与没有为BigDecimals 定义运算符&lt;= 的事实有关。使用compareTo方法进行比较,如下所示:

    BigDecimal balance = getSomeBigDecimal();
    if (balance.compareTo(BigDecimal.ONE) <= 0) { // lower or equals
        balance = BigDecimal.valueOf(2);
    } else {
        balance = BigDecimal.valueOf(3);
    }  
    

    【讨论】:

    • 数学运算符如+, -, /, *: add, multiply 等也是如此。丑陋,但 BigDecimal 的正确精度比它的不精确性要高出一倍。
    猜你喜欢
    • 2011-03-31
    • 2012-05-11
    • 2018-02-15
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2011-01-04
    • 1970-01-01
    相关资源
    最近更新 更多