У меня есть таблица, полная 10-значных целых чисел, и я думаю, что для ускорения запросов / математики в Oracle, сохраняя их как BINARY_FLOAT. Это более дружественно к процессору, чем NUMBER, и не займет много места (я думаю), что означает больше данных в памяти.
Однако, похоже, что BINARY_FLOAT возвращает одинаковые байты (и, следовательно, значение) для двух разных чисел ... что, очевидно, не будет работать.
Пример:
SQL> select dump(to_binary_float(25185387)) from dual;
DUMP(TO_BINARY_FLOAT(2518538
----------------------------
Typ=100 Len=4: 203,192,38,54
SQL> select dump(to_binary_float(25185388)) from dual;
DUMP(TO_BINARY_FLOAT(2518538
----------------------------
Typ=100 Len=4: 203,192,38,54
SQL> CREATE TABLE blah ( somenum BINARY_FLOAT );
Table created.
SQL> insert into blah (somenum) values (25185387);
1 row created.
SQL> insert into blah (somenum) values (25185388);
1 row created.
SQL> select somenum from blah;
SOMENUM
----------
2.519E+007
2.519E+007
SQL> select to_number(somenum) from blah;
TO_NUMBER(SOMENUM)
------------------
25185388
25185388
SQL> select dump(somenum) from blah;
DUMP(SOMENUM)
------------------------------------------------------------------------------------------------------------------------
Typ=100 Len=4: 203,192,38,54
Typ=100 Len=4: 203,192,38,54
Я ожидал, что если я попаду в число с плавающей точкой, у меня могут возникнуть некоторые проблемы, но это целые числа. Я пробовал разные заклинания - 25185387f, 25185387.0, 25185387 * 1.0, to_number (25185387) и т. Д.
Когда я читаю документы, BINARY_FLOAT следует хранить в 1.79e308, поэтому это не может быть проблемой с округлением.
Я использую Oracle 11.2.0.3 на 64-битной платформе.
Идеи? Спасибо.