CREATE TABLE test_data ( value BINARY_FLOAT );
Затем вы можете использовать BINARY_FLOAT_INFINITY
литерал :
INSERT INTO test_data ( value ) VALUES ( binary_float_infinity );
И, если вы хотите отрицательную бесконечность, просто добавьте ее со знаком минус:
INSERT INTO test_data ( value ) VALUES ( -binary_float_infinity );
Тогда:
SELECT * FROM test_data;
Выходы:
| VALUE |
| :---- |
| Inf |
| -Inf |
дБ <> скрипка здесь
Обновление
Тип данных FLOAT
Тип данных ANSI FLOAT
просто псевдоним для Oracle NUMBER
типа данных.
Из Oracle документации :
FLOAT [(p)]
- подтип тип данных NUMBER
, имеющий точность p
. Значение FLOAT
представляется внутри как NUMBER
. Точность p
может варьироваться от 1 до 126 двоичных цифр. Значение FLOAT
требует от 1 до 22 байт.
Технически возможно поместить бесконечность в тип данных FLOAT
(особенно если вы используете внешнее приложение, которое обходит обычные методы проверки ). Одним из таких примеров является использование DBMS_STATS.CONVERT_RAW_VALUE
:
CREATE FUNCTION negative_infinity RETURN FLOAT
IS
value FLOAT;
BEGIN
DBMS_STATS.CONVERT_RAW_VALUE(
UTL_RAW.CAST_TO_RAW( CHR(255)||CHR(101)),
value
);
RETURN value;
END;
/
Тогда вы можете сделать:
CREATE TABLE test_data2( value FLOAT );
INSERT INTO test_data2 ( value ) VALUES ( negative_infinity() );
Но это не значит, что значение поддерживается:
SELECT SUM(value) FROM test_data2;
Дает:
ORA-01426: numeric overflow
db <> fiddle здесь
Если вы хотите поддерживать бесконечность, то используйте тип данных, который его поддерживает BINARY_FLOAT
или BINARY_DOUBLE
; не пытайтесь получить значения в тип данных FLOAT
или NUMBER
, где они могут теоретически o, если вы обходите обычные методы проверки, но на самом деле не поддерживаются.