无穷大存储在数字列

时间:2016-11-25 09:12:30

标签: java oracle numbers infinity

我有一个如下表结构:

PROD(PROD_ID NUMBER,PROD_NAME VARCHAR2(100), MATCH_SCORE NUMBER)

基于某些计算(后端逻辑不属于我们的应用程序),有时Infinity会存储在MATCH_SCORE中。

问题是为什么它允许在NUMBER列(MATCH_SCORE)中使用Infinity。

我自己试图让Infinity进入专栏:

INSERT INTO PROD VALUES(1,"PEN",1.0F/0); -- Doesn't work
INSERT INTO PROD VALUES(1,"PEN",BINARY_DOUBLE_INFINITY); -- Doesn't work.

Oracle Documentation说:

  

以下数字可以存储在NUMBER列中:

     
      
  • 正数,范围为1 x 10-130至9.99 ... 9 x 10125,最多38位有效数字

  •   
  • 负数从-1 x 10-130到9.99 ... 99 x 10125,最多38位有效数字

  •   
  •   
  • 正负无穷(仅通过从Oracle数据库导入,第5版生成)

  •   

(我的重点)

我们不是从版本5迁移的,它仍然发生在Oracle 11中。

Java MCVE说明问题是如何产生的:

SQL:

CREATE TABLE test_infinity ( value NUMBER );

爪哇:

try {
  Class.forName( "oracle.jdbc.OracleDriver" );
  Connection con = DriverManager.getConnection(
    "jdbc:oracle:thin:@localhost:1521:orcl",
    "username",
    "password"
  );

  PreparedStatement st = con.prepareCall( "INSERT INTO test_infinity VALUES ( :value )" );
  ((OraclePreparedStatement)st).setNUMBERAtName( "value", NUMBER.posInf() );
  st.execute();
  st.close();
  con.close();
}
catch ( ClassNotFoundException | SQLException ex ){}

0 个答案:

没有答案