Ale*_*ole 14
从文件:
Oracle数据库数字数据类型存储正和负固定和浮点数,零,无穷大和值,这些是操作的未定义结果 - "非数字"或
NAN.
据我所知,你只能在binary_float或binary_double列中获取NaN ; 这些数据类型也有自己的NaN文字,并且它们也is nan有条件,以及操作它们的nanvl()功能.
获取此类值的方法示例是将零浮点/双精度值除以零:
select 0f/0 from dual;
0F/0
----
NaN  
...所以,如果您看到NaN,您的应用程序逻辑或基础数据可能会被破坏.(注意,你不能用'普通'数字类型得到它; ORA-01476: divisor is equal to zero除非分子是浮点数或双数,否则你得到它.
但是,你不会因为零或负数而获得NaN.你也可能有一个字符串列,一个应用程序正在输入单词'NaN',但是将数字存储为字符串在很多层面都是个坏主意,所以希望情况并非如此.
Nope <= 0仍然是一个数字,所以并不完全.NaN(或无穷大)是DB在处理不可计算的数字(+-∞或简单的非数字)时用来保持理智的特殊值.这是一些代码:
DECLARE
  l_bd_test   binary_double;
  l_int_test  INTEGER;
BEGIN
  l_bd_test   := 'NAN';
  l_int_test  := 0;
  IF l_bd_test IS NAN THEN 
    DBMS_OUTPUT.PUT_LINE(l_bd_test || ' IS NAN');
  ELSE
    DBMS_OUTPUT.PUT_LINE(l_bd_test || ' IS A #');
  END IF;
  IF l_int_test IS NAN THEN 
    DBMS_OUTPUT.PUT_LINE(l_int_test || ' IS NAN');
  ELSE
    DBMS_OUTPUT.PUT_LINE(l_int_test || ' IS A #');
  END IF;
END;
/
替代NAN的INFINITY,甚至否定它,并查看结果.
| 归档时间: | 
 | 
| 查看次数: | 5247 次 | 
| 最近记录: |