powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Максимальная длина типа number
19 сообщений из 44, страница 2 из 2
Максимальная длина типа number
    #39593304
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicdbpatchда, похоже так и есть. т.е. is infinite неявно приводит операнд к BINARY_DOUBLE,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> explain plan for select * from dual where rownum is infinite;

Explained.

Sou@sou749>; @plan

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------
Plan hash value: 3968617506

----------------------------------------------------------------------------
| Id  | Operation           | Name | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |      |     1 |     2 |     2   (0)| 00:00:01 |
|   1 |  COUNT              |      |       |       |            |          |
|*  2 |   FILTER            |      |       |       |            |          |
|   3 |    TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter(ROWNUM IS INFINITE)

stdspec.sql
Код: plsql
1.
2.
3.
4.
5.
6.
7.
  function 'IS NAN' (N NUMBER) RETURN BOOLEAN;
…
  function 'IS INFINITE' (N NUMBER) RETURN BOOLEAN;
…
  function 'IS NOT NAN' (N NUMBER) RETURN BOOLEAN;
…
  function 'IS NOT INFINITE' (N NUMBER) RETURN BOOLEAN;



очень хорошо, просто замечательно.
теперь попробуй присвоить в NUMBER значение NAN

кроме того, зачем вот так брать на понт? с каких пор package STANDARD соотвествует реальному SQL?
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593316
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да и спека, на самом деле, определена вот так (нехорошо обманывать взрослых)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  function 'IS NAN' (N NUMBER) RETURN BOOLEAN;
  function 'IS NAN' (F BINARY_FLOAT) RETURN BOOLEAN;
  function 'IS NAN' (D BINARY_DOUBLE) RETURN BOOLEAN;
  function 'IS INFINITE' (N NUMBER) RETURN BOOLEAN;
  function 'IS INFINITE' (F BINARY_FLOAT) RETURN BOOLEAN;
  function 'IS INFINITE' (D BINARY_DOUBLE) RETURN BOOLEAN;
  function 'IS NOT NAN' (N NUMBER) RETURN BOOLEAN;
  function 'IS NOT NAN' (F BINARY_FLOAT) RETURN BOOLEAN;
  function 'IS NOT NAN' (D BINARY_DOUBLE) RETURN BOOLEAN;
  function 'IS NOT INFINITE' (N NUMBER) RETURN BOOLEAN;
  function 'IS NOT INFINITE' (F BINARY_FLOAT) RETURN BOOLEAN;
  function 'IS NOT INFINITE' (D BINARY_DOUBLE) RETURN BOOLEAN;



и сделано это просто для "неявного" преобразования через перегрузку - вон последняя строка, причем это неявное преобразование типов уже в самой функции (где оно явное) сделано откровенно криво и с багом.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT * FROM (SELECT cast(utl_raw.cast_to_number('FF65') AS  binary_float) val FROM dual) WHERE val IS INFINITE;

SELECT * FROM (SELECT cast(utl_raw.cast_to_number('FF65') AS  binary_double) val FROM dual ) WHERE val IS INFINITE;

SELECT * FROM (SELECT cast(utl_raw.cast_to_number('FF65') AS  FLOAT) val FROM dual ) WHERE val IS INFINITE; -- oops

SELECT * FROM (SELECT cast(123 AS NUMBER) val FROM dual ) WHERE val IS INFINITE; -- 'IS NAN(N NUMBER) is here




и что с того? еще раз - IS INFINITE именно для NUMBER не документирован, он применим только к BINARY_ типам.
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593325
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchкроме того, зачем вот так брать на понт? с каких пор package STANDARD соотвествует реальному SQL?Понты тут только от тебя.
Я же лишь продемонстрировал тебе, что неявного преобразования нет ни в SQL, ни в PL/SQL. Но не в коня корм...
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593336
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchеще раз - IS INFINITE именно для NUMBER не документирован, он применим только к BINARY_ типам.Почитай же, наконец, доку:
RTFMIn both forms of floating-point condition, expr must resolve to a numeric data type or to any data type that can be implicitly converted to a numeric data typeБолее того:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Elic@elic122>; explain plan for select * from dual where dummy is infinite;

Explained.

Elic@elic122>; @plan

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------
Plan hash value: 272002086

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(TO_NUMBER("DUMMY") IS INFINITE)
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593337
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchда, похоже так и есть. т.е. is infinite неявно приводит операнд к BINARY_DOUBLEСначала стоит ознакомиться с тем, что лимиты совершенно разные для number и binary_double.
Можно хоть возвести в квадрат 1e125 и все равно это не будет бесконечность для binary_double.
Смотрим лимиты тут

dbpatchпонятие numeric data type это вовсе не про NUMBER data type https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT313 Overview of Numeric Datatypes
The numeric datatypes store positive and negative fixed and floating-point numbers, zero, infinity, and values that are the undefined result of an operation (that is, is "not a number" or NAN).

This section includes the following topics:
NUMBER Datatype
Floating-Point Numbers
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593338
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
dbms_photoshopinfinity получить можно программно в PL/SQL.я может плохо искал в документации, я не нашел почему в PL/SQL результат превышения намбером 1e126 приводит к inf, в старой четко написано:
https://docs.oracle.com/cd/B12037_01/appdev.101/b10807/03_types.htm NUMBER
You use the NUMBER datatype to store fixed-point or floating-point numbers. Its magnitude range is 1E-130 .. 10E125. If the value of an expression falls outside this range, you get a numeric overflow or underflow error.
В новой вообще выпилили этот кусок, зато сказали обращаться к SQL'ной доке, а мы видимо что результаты совершенно разные.
Так что имхо это либо какой-то атавизм, либо магия/баг pl/sql оптимизаций.
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593416
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicdbpatchкроме того, зачем вот так брать на понт? с каких пор package STANDARD соотвествует реальному SQL?Понты тут только от тебя.
Я же лишь продемонстрировал тебе , что неявного преобразования нет ни в SQL, ни в PL/SQL. Но не в коня корм...

да ничего ты не продемонстрировал, кроме упертости. что значит нет неявного преобразования? какие еще конные кормы? о чем ты вообще сейчас?

вот тут слово "неявного" 21150883 специально взято в кавычки - подразумевается неявное преобразование в SQL, а по факту (в силу каких-то ограничений движка) вместо ожидаемого неявного преобразования работает перегрузка вызовов от типа аргумента.

и это для SQL, как работает это все в PL/SQL - это вообще отдельный вопрос (по факту - ожидаемо работает иначе, ибо там уже честное неявное преобразование)

ты же изначально вовсе соврал, "забыв" указать варианты перегруженных из STANDARD функций с BINARY_ аргументами.
что ты этим хотел доказать - загадка.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT * FROM (SELECT cast(utl_raw.cast_to_number('FF65') AS  binary_double) val FROM dual ) WHERE val IS INFINITE;
SELECT * FROM (SELECT utl_raw.cast_to_number('FF65') val FROM dual ) WHERE val IS INFINITE; -- oops

BEGIN
  IF utl_raw.cast_to_number('FF65') IS INFINITE THEN 
    dbms_output.put_line('isn''t it too lame?');
  END IF;
END;
/



вывод последнего скрипта можешь посмотреть сам.
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593427
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicПочитай же, наконец, доку:
RTFMIn both forms of floating-point condition, expr must resolve to a numeric data type or to any data type that can be implicitly converted to a numeric data typeБолее того:

более того, ты бы сам почитал эту доку - а именно - название раздела, из которого ты взял эту цитату.
там вроде четко сказано, что Floating-point conditions, явная ссылка на Floating-point numbers на Implicit conversions, и нет ни слова про NUMBER.

И не надо рассказывать, что Numeric data type это про NUMBER. Потому что документация сама себе противоречит:

авторNumeric Datatypes

The Oracle Database numeric datatypes store positive and negative fixed and floating-point numbers, zero, infinity, and values that are the undefined result of an operation—"not a number" or NAN. For information on specifying numeric datatypes as literals, refer to "Numeric Literals".

NUMBER не может store NAN

или же мы говорим, что все ок, и это официальное утверждение, что NUMBER может все-таки хранить Infinity, NAN и прочее?
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593437
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchагрегатные функции работают, статистика считается - ну и ладно. ORA-01426: переполнение числа

А ты, чудак, продолжай убеждать себя, что бесконечность нормально обрабатывается.
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593456
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
dbpatchавторNumeric Datatypes

The Oracle Database numeric datatypes store positive and negative fixed and floating-point numbers, zero, infinity, and values that are the undefined result of an operation—"not a number" or NAN. For information on specifying numeric datatypes as literals, refer to "Numeric Literals".

NUMBER не может store NAN
интересный подход с выборочным чтением и толкованием документации весь спор из-за игнорирования кусочка чуть ниже:
https://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF30020 NUMBER Data Type
The NUMBER data type stores zero as well as positive and negative fixed numbers with absolute values from 1.0 x 10-130 to but not including 1.0 x 10126. If you specify an arithmetic expression whose value has an absolute value greater than or equal to 1.0 x 10126, then Oracle returns an error.
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593488
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicdbpatchагрегатные функции работают, статистика считается - ну и ладно. ORA-01426: переполнение числа

А ты, чудак, продолжай убеждать себя, что бесконечность нормально обрабатывается.

Чудак?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> CREATE TABLE inf_TEST AS
     SELECT utl_raw.cast_to_number('FF65') val FROM dual
     UNION ALL
     SELECT utl_raw.cast_to_number('00') FROM dual;
Table created

SQL> ANALYZE TABLE inf_test COMPUTE STATISTICS;
Table analyzed

SQL> BEGIN
    dbms_stats.gather_table_stats(USER, 'inf_test');
    END;
    /
PL/SQL procedure successfully completed

SQL> SELECT MIN(val) || '', MAX(val) || '' FROM inf_test;
MIN(VAL)||''                             MAX(VAL)||''
---------------------------------------- ----------------------------------------
-~                                       ~

SQL>



С нетерпением ждем продолжения "срыва покровов" в твоем исполнении. Уже второй день вон какое веселье на примитивном вопросе.
Что особенно забавно, так как эти бесконечности я сам не использую, а лишь натолкнулся на них в одном третьестороннем приложении.

Эдак мы еще и до нулевого символа посреди varchar2() дойдем, или до даты вида 0000-00-00 (и ее нескольких разновидностях в dump()-е), с животрепещущими откровениями о недопустимости использования оных вещей, пусть какие падаваны порадуются, старческому-то.
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593496
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderdbpatchпропущено...


NUMBER не может store NAN
интересный подход с выборочным чтением и толкованием документации весь спор из-за игнорирования кусочка чуть ниже:
https://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF30020 NUMBER Data Type
The NUMBER data type stores zero as well as positive and negative fixed numbers with absolute values from 1.0 x 10-130 to but not including 1.0 x 10126. If you specify an arithmetic expression whose value has an absolute value greater than or equal to 1.0 x 10126, then Oracle returns an error.

зачем ты выделил zero - загадка
а вот про fixed - уже интереснее.

осталось выяснить, что же такое fixed - в твоем понимании, и в понимании Oracle.

сможешь?
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593498
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
dbpatch,

ты видишь там infinity? а sum и avg - это не агрегатные функции?
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593500
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
dbpatchУже второй день вон какое веселье на примитивном вопросе.не знаю где тут веселье... тебя отговаривают стрелять себе в ногу, но ты сопротивляешься... тут печаль, а не веселье

зы. все равно скоро всем это надоест и убивайся как хочешь...
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593509
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderdbpatch,

ты видишь там infinity? а sum и avg - это не агрегатные функции?

да?

а что ты ожидаешь от avg(+/-бесконечность), sum(+/-бесконечность)

ноль? увы, правда бывает жестока

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT 
-- AVG(val), -- try this
-- SUM(val), --  try that
MIN(val)||'', 
MAX(val)||'' 
FROM 
(
SELECT CAST(val AS binary_double) val FROM (
 SELECT utl_raw.cast_to_number('FF65') val FROM dual
 UNION ALL 
 SELECT utl_raw.cast_to_number('00') FROM dual
)
)



ну или так, даже интереснее:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT 
-- AVG(val), -- try this
-- SUM(val), --  try that
MIN(val)||'', 
MAX(val)||''
FROM 
(
 SELECT BINARY_DOUBLE_INFINITY val FROM dual
 UNION ALL 
 SELECT -BINARY_DOUBLE_INFINITY FROM dual
 UNION ALL 
 SELECT BINARY_DOUBLE_NAN FROM dual
)
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593510
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderdbpatchУже второй день вон какое веселье на примитивном вопросе.не знаю где тут веселье... тебя отговаривают стрелять себе в ногу, но ты сопротивляешься... тут печаль, а не веселье

зы. все равно скоро всем это надоест и убивайся как хочешь...

ирония в том, что тут ни у кого нет реальной практики с inf, -inf, nan, но все почему-то считают своим долгом
поучать других, дескать я такой опытный неимоверно, пятикратный орденоносец STFF/RTFM третьей степени со стажем, мое мнение верно и незыблимо априори

мне же просто смешно "пошатать трубу", ловя "орденоносцев" на противоречивости и откровенной ложности их высказываний - просто проверяя те или иные примеры в консоли.


бороться против невежества (в особенности своего - я вот не знал про IS INFINITY) - оно не может надоесть.

так что там насчет fixed кстати? будут откровения?
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593521
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
dbpatch,

С математикой совсем плохо было? Не позорься как ты уже inf-inf сделал в самом начале
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593541
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderdbpatch,

С математикой совсем плохо было? Не позорься как ты уже inf-inf сделал в самом начале

С чего ты взял про "позориться"? Я просто забросил детектор. Никого не возмутило, видно все забыли и про

https://ru.wikipedia.org/wiki/Раскрытие_неопределённостей

ну и https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html#5001 - это уж точно прочитало дальше первого листа не более 0.01% от разработчиков

вернее забыли то, чего и не знали (хотя как инженер по образованию могу смело сказать - 95% курса матана, начиная со школы - бесполезный хлам, если не рассматривать его как фильтр абитуриентов на гуманитарные направления, а оставшихся 5% как раз хватит для космических полетов и не только).
...
Рейтинг: 0 / 0
Максимальная длина типа number
    #39593550
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
dbpatch,

обдумал бы табличку внизу 21148756 и не феерил тут
...
Рейтинг: 0 / 0
19 сообщений из 44, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Максимальная длина типа number
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]