powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle Database 21c. SQL. New Features
54 сообщений из 54, показаны все 3 страниц
Oracle Database 21c. SQL. New Features
    #40031923
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как уже сообщалось ранее
В облаке Oracle уже доступна Автономная Oracle Database 21c (Always Free)

Предлагаю в этой теме обсудить новые возможности языка Oracle Database 21c SQL.

Только SQL!
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031927
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем? Лет через пять, когда можно будет без страха ими пользоваться, стоящие новшества уже будут на слуху, а меркетинговый bull-shit затухнет.
А подавляющему большинству "новизна" новшеств - по барабану. Не говоря уже про принятую в этой корпорации первоначальную глючность любых новшеств.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031931
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новая агрегатная (групповая) функция CHECKSUM


https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/checksum.html


Purpose

Use CHECKSUM to detect changes in a table. The order of the rows in the table does not affect the result. You can use CHECKSUM with DISTINCT, as part of a GROUP BY query, as a window function, or an analytical function.

Semantics

ALL: Applies the aggregate function to all values. ALL is the default option.

DISTINCT or UNIQUE: Returns the checksum of unique values. UNIQUE is an Oracle-specific keyword and not an ANSI standard.

expr: Can be a column, constant, bind variable, or an expression involving them. All data types except ADT and JSON are supported.

The return data type is an Oracle number (converted from an (8-byte) signed long long) regardless of the data type of expr.

NULL values in expr column are ignored.

It returns NULL if expr is NULL.

The output of the CHECKSUM function is deterministic and independent of the ordering of the input rows.

Провёл эксперимент.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SQL> select checksum(country_name), checksum(distinct country_name)
  2       , count(*), count(distinct country_name) 
  3  from sh.countries;

CHECKSUM(COUNTRY_NAME) CHECKSUM(DISTINCTCOUNTRY_NAME)   COUNT(*) COUNT(DISTINCTCOUNTRY_NAME)
---------------------- ------------------------------ ---------- ---------------------------
                117432                         117432         23                          23

SQL> 
SQL> select checksum(country_region), checksum(distinct country_region)
  2       , count(*), count(distinct country_region) 
  3  from sh.countries;

CHECKSUM(COUNTRY_REGION) CHECKSUM(DISTINCTCOUNTRY_REGION)   COUNT(*) COUNT(DISTINCTCOUNTRY_REGION)
------------------------ -------------------------------- ---------- -----------------------------
                  683368                           415340         23                             6


Как видим, если значения столбца уникальны, результат для ALL и DISTINCT одинаковый.
Что и следовало ожидать.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031936
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Как видим, если значения столбца уникальны, результат для ALL и DISTINCT одинаковый.
Что и следовало ожидать.
А проверять надо было бы то, что результат не зависит от порядка строк.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031938
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
SQL*Plus
Как видим, если значения столбца уникальны, результат для ALL и DISTINCT одинаковый.
Что и следовало ожидать.
А проверять надо было бы то, что результат не зависит от порядка строк.

Написано, что не зависит:
The output of the CHECKSUM function is deterministic and independent of the ordering of the input rows.
Проверь.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031943
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напомните плз по групп баям, а то за новинками не успеваю...

Произведение сделали?
Конкатенацию строк listagg в clob сделали?
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031946
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/BIT_AND_AGG.html BIT_AND_AGG

Syntax


Purpose

BIT_AND_AGG is a bitwise aggregation function that returns the result of a bitwise AND operation.

You can use BIT_AND_AGG as part of a GROUP BY query, window function, or as an analytical function. The return type of BIT_AND_AGG is always a number.

Есть аналогичные BIT_OR_AGG и BIT_XOR_AGG

Пример:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> WITH nums AS (
  2     select 3 as n from dual union all
  3     select 5 as n from dual)
  4  --
  5  SELECT sum(n), BIT_AND_AGG(n), BIT_OR_AGG(n), BIT_XOR_AGG(n) FROM nums;

    SUM(N) BIT_AND_AGG(N) BIT_OR_AGG(N) BIT_XOR_AGG(N)
---------- -------------- ------------- --------------
         8              1             7              6
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031949
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Elic
пропущено...
А проверять надо было бы то, что результат не зависит от порядка строк.

Написано, что не зависит:
The output of the CHECKSUM function is deterministic and independent of the ordering of the input rows.
Проверь.

Я проверил. От порядка трок результат не зависит:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> select checksum(country_region), checksum(distinct country_region)
  2       , count(*), count(distinct country_region) 
  3  from sh.countries;

CHECKSUM(COUNTRY_REGION) CHECKSUM(DISTINCTCOUNTRY_REGION)   COUNT(*) COUNT(DISTINCTCOUNTRY_REGION)
------------------------ -------------------------------- ---------- -----------------------------
                  683368                           415340         23                             6

SQL> select checksum(country_region), checksum(distinct country_region)
  2       , count(*), count(distinct country_region) 
  3  from (SELECT * FROM sh.countries ORDER BY dbms_random.value);

CHECKSUM(COUNTRY_REGION) CHECKSUM(DISTINCTCOUNTRY_REGION)   COUNT(*) COUNT(DISTINCTCOUNTRY_REGION)
------------------------ -------------------------------- ---------- -----------------------------
                  683368                           415340         23                             6
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031950
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
Напомните плз по групп баям, а то за новинками не успеваю...

Произведение сделали?
Конкатенацию строк listagg в clob сделали?

Не всё сразу.
Постепенно разберёмся, раз уж выложили в доступ Oracle 21c.
Для этого и тема была создана.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031953
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут всё осталось, как было в Oracle 19с
https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LISTAGG.html LISTAGG
................................
The maximum length of the return data type depends on the value of the MAX_STRING_SIZE initialization parameter.
If MAX_STRING_SIZE = EXTENDED, then the maximum length is 32767 bytes for the VARCHAR2 and RAW data types.
If MAX_STRING_SIZE = STANDARD, then the maximum length is 4000 bytes for the VARCHAR2 data type
and 2000 bytes for the RAW data type. A final delimiter is not included when determining if the return value fits in the return data type.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031959
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Написано, что не зависит:
The output of the CHECKSUM function is deterministic and independent of the ordering of the input rows.
Проверь.
Ты пиаришь. Докажи сам.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031962
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
А проверять надо было бы то, что результат не зависит от порядка строк.
Интересно, как они это реализовали. Мне, кроме sorted list, ничего больше в голову не приходит.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031968
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oragraf
Elic
А проверять надо было бы то, что результат не зависит от порядка строк.
Интересно, как они это реализовали. Мне, кроме sorted list, ничего больше в голову не приходит.
Какая разница? Ставлю на то, что без глюков не обойдётся.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031975
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/BIT_AND_AGG.html BIT_AND_AGG

Syntax


Purpose

BIT_AND_AGG is a bitwise aggregation function that returns the result of a bitwise AND operation.

You can use BIT_AND_AGG as part of a GROUP BY query, window function, or as an analytical function. The return type of BIT_AND_AGG is always a number.


Есть аналогичные BIT_OR_AGG и BIT_XOR_AGG

Пример:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> WITH nums AS (
  2     select 3 as n from dual union all
  3     select 5 as n from dual)
  4  --
  5  SELECT sum(n), BIT_AND_AGG(n), BIT_OR_AGG(n), BIT_XOR_AGG(n) FROM nums;

    SUM(N) BIT_AND_AGG(N) BIT_OR_AGG(N) BIT_XOR_AGG(N)
---------- -------------- ------------- --------------
         8              1             7              6

mul_and_agg не хватает
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031984
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
SQL*Plus
Написано, что не зависит:
The output of the CHECKSUM function is deterministic and independent of the ordering of the input rows.
Проверь.
Ты пиаришь. Докажи сам.

Уже было.

22255936
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031987
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Elic
пропущено...
Ты пиаришь. Докажи сам.

Уже было.

22255936
с разными NLS-ами пробовал?
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031993
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Enhanced SQL Set Operators

The SQL set operators now support all keywords as defined in ANSI SQL.
The new operator EXCEPT [ALL] is functionally equivalent to MINUS [ALL].
The operators MINUS and INTERSECT now support the keyword ALL.


Очень интересно работают MINUS ALL / EXCEPT ALL и INTERSECT ALL:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
SQL> select job from emp where deptno = 20;

JOB      
---------
CLERK
MANAGER
ANALYST
CLERK
ANALYST

SQL> select job from emp where deptno = 10;

JOB      
---------
MANAGER
PRESIDENT
CLERK

SQL> select job from emp where deptno = 20
  2  MINUS
  3  select job from emp where deptno = 10;

JOB      
---------
ANALYST

SQL> select job from emp where deptno = 20
  2  MINUS ALL
  3  select job from emp where deptno = 10;

JOB      
---------
CLERK
ANALYST
ANALYST

SQL> select job from emp where deptno = 20
  2  EXCEPT
  3  select job from emp where deptno = 10;

JOB      
---------
ANALYST

SQL> select job from emp where deptno = 20
  2  EXCEPT ALL
  3  select job from emp where deptno = 10;

JOB      
---------
CLERK
ANALYST
ANALYST

SQL> select job from emp where deptno = 20
  2  INTERSECT
  3  select job from emp where deptno = 10;

JOB      
---------
MANAGER
CLERK

SQL> select job from emp where deptno = 20
  2  INTERSECT ALL
  3  select job from emp where deptno = 10;

JOB      
---------
MANAGER
CLERK


Описание Set Operators приводить не стал, поскольку там какая-то явная ерунда написана.
Писал человек, не понимающий о чем речь, но успешно использующий Copy + Paste

Для удобства ваших ваших экспериментов прикрепляю файл demobld.sql для создания демо-таблиц.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031994
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
SQL*Plus
пропущено...

Уже было.

22255936
с разными NLS-ами пробовал?

Нет, не пробовал.
Попробуешь и нам расскажешь.
Ага? :-)
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40031998
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
andreymx
пропущено...
с разными NLS-ами пробовал?

Нет, не пробовал.
Попробуешь и нам расскажешь.
Ага? :-)


Я проверил.
Для русского языка работает.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
SQL> select CHECKSUM(man_name), COUNT(*) 
  2  FROM rus_names;

CHECKSUM(MAN_NAME)   COUNT(*)
------------------ ----------
            570896        252

SQL> select CHECKSUM(man_name), COUNT(*) 
  2  FROM (SELECT * FROM rus_names ORDER BY dbms_random.value);

CHECKSUM(MAN_NAME)   COUNT(*)
------------------ ----------
            570896        252

SQL> select CHECKSUM(man_name), COUNT(*) 
  2  FROM (SELECT * FROM rus_names ORDER BY dbms_random.value);

CHECKSUM(MAN_NAME)   COUNT(*)
------------------ ----------
            570896        252

SQL> SELECT * FROM nls_database_parameters WHERE parameter LIKE 'NLS%CHARACTERSET';

PARAMETER                            VALUE                                                           
------------------------------------ ------------------------
NLS_NCHAR_CHARACTERSET               AL16UTF16                                                       
NLS_CHARACTERSET                     AL32UTF8                                                        


Файл M_IM.txt с русскими именами прилагается.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032001
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Описание Set Operators приводить не стал, поскольку там какая-то явная ерунда написана.
И это не мешает продолжать навязчиво пиарить? Валерий, это не спортивно.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032002
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Я проверил.
Для русского языка работает.
Ты не понял, что нужно проверять. Я объясняю: в БД с разными кодировками одинаков ли результат чексуммирования?
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032005
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
SQL*Plus
Описание Set Operators приводить не стал, поскольку там какая-то явная ерунда написана.
И это не мешает продолжать навязчиво пиарить? Валерий, это не спортивно.

Слушай, дорогой друг.
Чего ты "спортивно" пристал, как банный лист к голеностопу?

Я рассказываю о новых возможностях новой версии нашей любимой СУБД,
а ты тут глупо бухтищь, ворчишь и скрипишь не по делу.

Не хочешь помогать изучению новых возможностей, так хотя бы не мешай.
Иди на своё производство, к своему станку 11.2.0.4 и работай, работай, работай.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032008
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
SQL*Plus
Я проверил.
Для русского языка работает.
Ты не понял, что нужно проверять. Я объясняю: в БД с разными кодировками одинаков ли результат чексуммирования?

Проверь и расскажи нам, что получится.
Например, запиши ещё что-нибудь в поле типа NVARCHAR2.
Предполагаю, что для разных кодировок могут быть разные результаты.
И что?

Use CHECKSUM to detect changes in a table.
Эту задачу функция выполнит, а другого никто не обещал.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032011
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus,

А коллизии возможны? (одинаковый результат для разных значений поля, например)
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032012
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Elic
пропущено...
Ты не понял, что нужно проверять. Я объясняю: в БД с разными кодировками одинаков ли результат чексуммирования?

Проверь и расскажи нам, что получится.
Например, запиши ещё что-нибудь в поле типа NVARCHAR2.
Предполагаю, что для разных кодировок могут быть разные результаты.
И что?

Use CHECKSUM to detect changes in a table.
Эту задачу функция выполнит, а другого никто не обещал.


Проверил. Всё так, как я предполагал.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SQL> ALTER TABLE rus_names ADD man_name_nvc2 NVARCHAR2(26);
Table RUS_NAMES altered.

SQL> UPDATE rus_names SET MAN_NAME_NVC2 = MAN_NAME;
252 rows updated.

SQL> SELECT * FROM rus_names WHERE rownum <= 5;

MAN_NAME                   MAN_NAME_NVC2             
-------------------------- --------------------------
Харлампий                  Харлампий                 
Эдгард                     Эдгард                    
Эдуард                     Эдуард                    
Юлий                       Юлий                      
Юрий                       Юрий                      

SQL> COMMIT;
Commit complete.

SQL> select CHECKSUM(man_name), CHECKSUM(man_name_nvc2), COUNT(*) 
  2  FROM (SELECT * FROM rus_names ORDER BY dbms_random.value);

CHECKSUM(MAN_NAME) CHECKSUM(MAN_NAME_NVC2)   COUNT(*)
------------------ ----------------------- ----------
            570896                   20093        252


Результат "чексуммирования" получился разный.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032015
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
SQL*Plus,

А коллизии возможны? (одинаковый результат для разных значений поля, например)


Мы с вами знаем, что разработчики Oracle используют наилучшие алгоритмы.
Поэтому вероятность такого события должна быть очень мала.

https://en.wikipedia.org/wiki/Checksum
https://ru.wikipedia.org/wiki/Контрольная_сумма
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032020
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Мы с вами знаем, что разработчики Oracle используют наилучшие алгоритмы.
Поэтому вероятность такого события должна быть очень мала.


Джон: Ага! Вы только что признали, что ученые могут ошибаться, а вот мы знаем, что Хэнк всегда прав.
Я: Мы знаем?
Мэри: Конечно, из 7-го пункта.
http://lurkmore.to/Жопа_Хэнка
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032028
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
SQL*Plus
Мы с вами знаем, что разработчики Oracle используют наилучшие алгоритмы.
Поэтому вероятность такого события должна быть очень мала.


Джон: Ага! Вы только что признали, что ученые могут ошибаться, а вот мы знаем, что Хэнк всегда прав.
Я: Мы знаем?
Мэри: Конечно, из 7-го пункта.
http://lurkmore.to/Жопа_Хэнка

...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032089
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
andreymx
с разными NLS-ами пробовал?
да тут в общем-то очевидно:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> select dump(-1),dump('>df') from dual;

DUMP(-1)                DUMP('>DF')
----------------------- ------------------------
Typ=2 Len=3: 62,100,102 Typ=96 Len=3: 62,100,102

SQL> select checksum(-1),checksum('>df') from dual;

CHECKSUM(-1) CHECKSUM('>DF')
------------ ---------------
      811538          811538




env
А коллизии возможны? (одинаковый результат для разных значений поля, например)
ну, конечно, же. Имхо, очевидно, что выбран алгоритм с какой-то коммуникативной операцией над (скорее всего) хэшами значений.
коллизии 1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
  1  with v as (
  2  select
  3    (select listagg(tc.column_value,',') from table(t.column_value)tc) as vals
  4   ,(select checksum(tc.column_value) from table(t.column_value)tc) as chksum
  5  from table(powermultiset(sys.ku$_vcnt(
  6  1,2,3,4,5,6,7,8,9,0
  7  ,'1a','2a'
  8  ))) t
  9  )
 10  --select count(distinct vals), count(distinct chksum) from v
 11  select chksum,min(vals) cmin,max(vals)cmax,count(*) cnt
 12  from v
 13  group by chksum
 14* having count(*)>1
SQL> /

    CHKSUM CMIN                                     CMAX                                            CNT
---------- ---------------------------------------- ---------------------------------------- ----------
      9254 1,2,4,9,0,2a                             1,2,6,7,8,0,1a,2a                                 2
    125834 2,3,0,2a                                 3,7,8,9,0                                         2
    288809 1,2,3,4,5,8,9,0                          1,2,4,5,6,7,8,9,1a                                2
    345903 1,2,3,4,6,8,9,0,1a,2a                    4,6,7,0,1a                                        2
    419682 1,2,3,4,8,2a                             4,7,8                                             2
    812935 1,2,3,4,6,8,0,1a,2a                      1,7,8,9,0,1a                                      2
    899015 1,2,4,6,7,8,9,0,2a                       2,4,8,9,1a,2a                                     2
    920128 1,2,3,4,6,8,9,1a,2a                      2,4,9,0,1a,2a                                     2

8 rows selected.

коллизии 2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  1  with v as (select n,checksum(rpad('x',n,'x')) chk from xmltable('1 to 4000' columns n for ordinality) group by n)
  2* select chk,min(n),max(n),count(*) from v where chk>0 group by chk having count(*)>1
SQL> /

       CHK     MIN(N)     MAX(N)   COUNT(*)
---------- ---------- ---------- ----------
     84203       2948       3266          2
     72871       1552       2633          2
    203951        738       2208          2
    234729       1796       1903          2
    218740        787       2446          2
    906628       3506       3739          2

6 rows selected.

Заметно, что с увеличением длины входных параметров, вероятность коллизий повышается. Можно, конечно, посмотреть что там за функция внутри вызывается(скорее всего не стали велосипедить и взяли что-то уже готовое что уже используется в ora_hash, standard_hash и тп) над каждым параметром, но мне лень, а главное не вижу смысла.

зы. Некоммутативные операции они использовали для новых "блокчейн таблиц".
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032098
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Как видим, если значения столбца уникальны, результат для ALL и DISTINCT одинаковый.

У них же есть STANDARD_HASH, который умеет считать SHA, зачем этот чексум нужен?
BIT_OR_AGG
Битодрочить - это очень актуально.

И всё? Что там еще есть свежего и интересного? Должно же быть что-то.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032115
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

Как-то совсем печально выглядит, можно ненароком пропустить изменение значения с такими пересечениями.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032136
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus


Очень интересно работают MINUS ALL / EXCEPT ALL и INTERSECT ALL:



внутри аналитика, или чесно сделали?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> ed
Wrote file afiedt.buf

  1  select job,row_number() over (partition by job order by null) rn from emp where deptno = 20
  2  MINUS --ALL
  3* select job,row_number() over (partition by job order by null) rn from emp where deptno = 10
SQL> /

JOB               RN
--------- ----------
ANALYST            1
ANALYST            2
CLERK              2

SQL




.....
stax
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032244
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
SQL*Plus


Очень интересно работают MINUS ALL / EXCEPT ALL и INTERSECT ALL:


внутри аналитика, или чесТно сделали?

Сделали честно:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
SQL> EXPLAIN PLAN FOR
  2  select job from emp where deptno = 20
  3  MINUS ALL
  4  select job from emp where deptno = 10;
Explained.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
----------------------------------------------------------------------------------------------------
Plan hash value: 261732639
 
---------------------------------------------------------------------------------------------------
| Id  | Operation                            | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                     |            |     5 |    88 |     6  (34)| 00:00:01 |
|   1 |  MINUS ALL HASH                      |            |       |       |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID BATCHED| EMP        |     5 |    55 |     2   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN                  | EMP#R#DEPT |     5 |       |     1   (0)| 00:00:01 |
|   4 |   TABLE ACCESS BY INDEX ROWID BATCHED| EMP        |     3 |    33 |     2   (0)| 00:00:01 |
|*  5 |    INDEX RANGE SCAN                  | EMP#R#DEPT |     3 |       |     1   (0)| 00:00:01 |

PLAN_TABLE_OUTPUT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
----------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   3 - access("DEPTNO"=20)
   5 - access("DEPTNO"=10)
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032250
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus,

спасибо


listagg дальше при переполнении обрезают с запасом?

зы
мне не принципиально, так больше из-за интереса

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032263
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выпустили новых джиннов "из бутылки":
SQL MacrosYou can create SQL Macros (SQM) to factor out common SQL expressions and
statements into reusable, parameterized constructs that can be used in other SQL
statements. SQL macros can either be scalar expressions , typically used in SELECT
lists, WHERE, GROUPBY and HAVING clauses, to encapsulate calculations and business
logic or can be table expressions , typically used in a FROM clause.

SQL macros increase developer productivity, simplify collaborative development, and
improve code quality.


SQL Macros - Scalar Valued Macros

Код: 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> --SQL Macros - Scalar Valued Macros: Examples
SQL> --Print Hello <name>
SQL> --A PL/SQL function greet is defined as a scalar SQL Macro that returns the string
SQL> --'Hello, <name>! ' when called from a SQL SELECT statement.
SQL> create or replace function greet(name varchar2 default 'World')
  2  return varchar2 SQL_MACRO(Scalar) is
  3  begin
  4     return q'{ 'Hello, ' || name || '!' }';
  5  end;
  6  /
Function GREET compiled

SQL> SELECT greet from dual;

GREET        
-------------
Hello, World!

SQL> SELECT greet('uncle Bob') from dual;

GREET('UNCLEBOB')
-----------------
Hello, uncle Bob!

Может быть в этом варианте всё будет делать SQL Engine без переключения на PL/SQL Engine?
Тогда получилось бы ускорение.

SQL Macros - Table Valued Macros: Examples

Код: 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> --SQL Macros - Table Valued Macros: Examples
SQL> --The macro function budget computes the amount of each department's budget for a given job. 
SQL> -- It returns the number of employees in each department with the specified job title.
SQL> create or replace function budget(job varchar2) return varchar2 SQL_MACRO is
  2  begin
  3  return q'{
  4  select deptno, sum(sal) AS budget
  5  from emp
  6  where job = budget.job
  7  group by deptno
  8  }';
  9  end;
 10  /

Function BUDGET compiled

SQL> SELECT * FROM budget ('MANAGER');

    DEPTNO     BUDGET
---------- ----------
        20       2975
        30       2850
        10       2450



Это прямо для любителей 'SELECT из процедуры, как в Microsoft SQL Server" :-)

Посмотрим, как эти "джинны" себя в жизни проявят.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032266
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus

внутри аналитика, или чесТно сделали?


Не знаю насколько "чесТно". Зависит от того что у MINUS ALL HASH под капотом. "Умен" ли оптимизатор настолько чтобы не хешировать с гулькин нос job и сравнивать хеши а просто сравнивать job.

SY.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032273
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus


SQL Macros - Table Valued Macros: Examples


недавно SY антипример приводил для SQL_MACRO

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032283
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax

недавно SY антипример приводил для SQL_MACRO


Stax, это не был "антипример" а просто пример того что SQL MACRO облегчает кодирование SELECTа с переменным числом полей но полностью не решает (пока Oracle не даст возможность указать hard parse).

SY.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032314
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Stax

недавно SY антипример приводил для SQL_MACRO


Stax, это не был "антипример" а просто пример того что SQL MACRO облегчает кодирование SELECTа с переменным числом полей но полностью не решает (пока Oracle не даст возможность указать hard parse).

SY.


возможности я так понял нет, то фича сомнительная (в некотором смысле вредная)

я б сделал просто, если ф-ция not determenistic то надо делать 'hard parse'

или sql-ки сравнивать после применения ф-ции

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032332
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
SQL*Plus,

спасибо

listagg дальше при переполнении обрезают с запасом?
зы
мне не принципиально, так больше из-за интереса
.....
stax
Все точно так же, как было в Oracle 19c

listagg_overflow_clause::=

...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032346
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus,

неясно выразился
я об реализации
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
with t as (
select -2 id,lpad('*',2000,'-') n from dual union all
select -1 id,lpad('$',2000,'-') from dual union all
select 0 id,lpad('^',3964,'-') from dual union all
select 1 id,'1' from dual union all
select 2 id,'2' from dual union all
select 3 id,'3' from dual union all
select 4 id,'4' from dual union all
select 5 id,'5' from dual union all
select 6 id,'6' from dual union all
select 7 id,'7' from dual union all
select 8 id,'8' from dual union all
select 9 id,'9' from dual union all
select 10 id,'0' from dual union all
select 11 id,'a' from dual union all
select 12 id,'b' from dual union all
select 13 id,'c' from dual union all
select 14 id,'d' from dual union all
select 15 id,'e' from dual union all
select 16 id,'f' from dual union all
select 17 id,'g' from dual union all
select 18 id,'h' from dual union all
select 19 id,'i' from dual union all
select 20 id,'j' from dual union all
select 21 id,'k' from dual union all
select 22 id,'l' from dual union all
select 23 id,'m' from dual union all
select 24 id,'n' from dual union all
select 25 id,'o' from dual union all
select 26 id,'p' from dual union all
select 27 id,'q' from dual union all
select 28 id,'r' from dual union all
select 29 id,'s' from dual union all
select 30 id,'t' from dual union all
select 31 id,'u' from dual union all
select 32 id,'v' from dual union all
select 33 id,'w' from dual union all
select 34 id,'x' from dual union all
select 35 id,'y' from dual union all
select 36 id,'z' from dual union all
--
select 200 id,'!' from dual 
)
select 
length(
 listagg(n ON OVERFLOW TRUNCATE '>' WITH /*OUT*/ COUNT) WITHIN GROUP (ORDER BY id ) 
) 
s 
from t where id>=0 --group by 1

3977
1 rows returned in 0.01 seconds	   



еще куча елементов в 4000 поместится, а он взял и обрезал

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032383
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
SQL*Plus,

неясно выразился
я об реализации
об реализации
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
with t as (
select -2 id,lpad('*',2000,'-') n from dual union all
select -1 id,lpad('$',2000,'-') from dual union all
select 0 id,lpad('^',3964,'-') from dual union all
select 1 id,'1' from dual union all
select 2 id,'2' from dual union all
select 3 id,'3' from dual union all
select 4 id,'4' from dual union all
select 5 id,'5' from dual union all
select 6 id,'6' from dual union all
select 7 id,'7' from dual union all
select 8 id,'8' from dual union all
select 9 id,'9' from dual union all
select 10 id,'0' from dual union all
select 11 id,'a' from dual union all
select 12 id,'b' from dual union all
select 13 id,'c' from dual union all
select 14 id,'d' from dual union all
select 15 id,'e' from dual union all
select 16 id,'f' from dual union all
select 17 id,'g' from dual union all
select 18 id,'h' from dual union all
select 19 id,'i' from dual union all
select 20 id,'j' from dual union all
select 21 id,'k' from dual union all
select 22 id,'l' from dual union all
select 23 id,'m' from dual union all
select 24 id,'n' from dual union all
select 25 id,'o' from dual union all
select 26 id,'p' from dual union all
select 27 id,'q' from dual union all
select 28 id,'r' from dual union all
select 29 id,'s' from dual union all
select 30 id,'t' from dual union all
select 31 id,'u' from dual union all
select 32 id,'v' from dual union all
select 33 id,'w' from dual union all
select 34 id,'x' from dual union all
select 35 id,'y' from dual union all
select 36 id,'z' from dual union all
--
select 200 id,'!' from dual 
)
select 
length(
 listagg(n ON OVERFLOW TRUNCATE '>' WITH /*OUT*/ COUNT) WITHIN GROUP (ORDER BY id ) 
) 
s 
from t where id>=0 --group by 1

3977
1 rows returned in 0.01 seconds	   



еще куча елементов в 4000 поместится, а он взял и обрезал

.....
stax
Выражайтесь яснее :-)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
...
 48  s 
 49  from t where id>=0;

         S
----------
      4001
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032394
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Stax
SQL*Plus,

неясно выразился
я об реализации
об реализации
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
with t as (
select -2 id,lpad('*',2000,'-') n from dual union all
select -1 id,lpad('$',2000,'-') from dual union all
select 0 id,lpad('^',3964,'-') from dual union all
select 1 id,'1' from dual union all
select 2 id,'2' from dual union all
select 3 id,'3' from dual union all
select 4 id,'4' from dual union all
select 5 id,'5' from dual union all
select 6 id,'6' from dual union all
select 7 id,'7' from dual union all
select 8 id,'8' from dual union all
select 9 id,'9' from dual union all
select 10 id,'0' from dual union all
select 11 id,'a' from dual union all
select 12 id,'b' from dual union all
select 13 id,'c' from dual union all
select 14 id,'d' from dual union all
select 15 id,'e' from dual union all
select 16 id,'f' from dual union all
select 17 id,'g' from dual union all
select 18 id,'h' from dual union all
select 19 id,'i' from dual union all
select 20 id,'j' from dual union all
select 21 id,'k' from dual union all
select 22 id,'l' from dual union all
select 23 id,'m' from dual union all
select 24 id,'n' from dual union all
select 25 id,'o' from dual union all
select 26 id,'p' from dual union all
select 27 id,'q' from dual union all
select 28 id,'r' from dual union all
select 29 id,'s' from dual union all
select 30 id,'t' from dual union all
select 31 id,'u' from dual union all
select 32 id,'v' from dual union all
select 33 id,'w' from dual union all
select 34 id,'x' from dual union all
select 35 id,'y' from dual union all
select 36 id,'z' from dual union all
--
select 200 id,'!' from dual 
)
select 
length(
 listagg(n ON OVERFLOW TRUNCATE '>' WITH /*OUT*/ COUNT) WITHIN GROUP (ORDER BY id ) 
) 
s 
from t where id>=0 --group by 1

3977
1 rows returned in 0.01 seconds	   



еще куча елементов в 4000 поместится, а он взял и обрезал

.....
stax
Выражайтесь яснее :-)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
...
 48  s 
 49  from t where id>=0;

         S
----------
      4001



надо для базы с MAX_STRING_SIZE = STANDARD (4000байт, или тест делать для 32767)

lenght ('--------------------^12345678>(29)')=3977

до 4000 еще есть 23 байта, туда поместятся записи с id=9-31, но оракля их в результат не включил, хотя запросто мог

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032510
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
надо для базы с MAX_STRING_SIZE = STANDARD (4000байт, или тест делать для 32767)


MAX_STRING_SIZE = STANDARD в автономной базе я сделать не смогу.
Напишите, как считаете нужным "тест делать для 32767", а я выполню такой тест.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032523
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
with t as (
select -2 id,lpad('*',2000,'-') n from dual union all
select -1 id,lpad('$',2000,'-') from dual union all
--select 0 id,lpad('^',3964,'-') from dual union all
select 0 id,lpad('^',32767-30,'-') from dual union all
select 1 id,'1' from dual union all
select 2 id,'2' from dual union all
select 3 id,'3' from dual union all
select 4 id,'4' from dual union all
select 5 id,'5' from dual union all
select 6 id,'6' from dual union all
select 7 id,'7' from dual union all
select 8 id,'8' from dual union all
select 9 id,'9' from dual union all
select 10 id,'0' from dual union all
select 11 id,'a' from dual union all
select 12 id,'b' from dual union all
select 13 id,'c' from dual union all
select 14 id,'d' from dual union all
select 15 id,'e' from dual union all
select 16 id,'f' from dual union all
select 17 id,'g' from dual union all
select 18 id,'h' from dual union all
select 19 id,'i' from dual union all
select 20 id,'j' from dual union all
select 21 id,'k' from dual union all
select 22 id,'l' from dual union all
select 23 id,'m' from dual union all
select 24 id,'n' from dual union all
select 25 id,'o' from dual union all
select 26 id,'p' from dual union all
select 27 id,'q' from dual union all
select 28 id,'r' from dual union all
select 29 id,'s' from dual union all
select 30 id,'t' from dual union all
select 31 id,'u' from dual union all
select 32 id,'v' from dual union all
select 33 id,'w' from dual union all
select 34 id,'x' from dual union all
select 35 id,'y' from dual union all
select 36 id,'z' from dual union all
--
select 200 id,'!' from dual 
)
select 
  substra(listagg(n ON OVERFLOW TRUNCATE '>' WITH /*OUT*/ COUNT) WITHIN GROUP (ORDER BY id ),-50 ) s, 
  length (listagg(n ON OVERFLOW TRUNCATE '>' WITH /*OUT*/ COUNT) WITHIN GROUP (ORDER BY id ) ) len 
from t where id>=0 



ps
никогда не работал с EXTENDED

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032527
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Вот результат
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
............
44  )
 45  select 
 46    substr(listagg(n ON OVERFLOW TRUNCATE '>' WITH /*OUT*/ COUNT) WITHIN GROUP (ORDER BY id ),-50 ) s, 
 47    length (listagg(n ON OVERFLOW TRUNCATE '>' WITH /*OUT*/ COUNT) WITHIN GROUP (ORDER BY id ) ) len 
 48  from t where id>=0;

S                                                         LEN
-------------------------------------------------- ----------
------------------------------------------^12>(35)      32744



Это хорошо? Это плохо?

>>>никогда не работал с EXTENDED
Всё когда-то делается впервые :-)
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032538
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus


Stax,

Вот результат
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
............
44  )
 45  select 
 46    substr(listagg(n ON OVERFLOW TRUNCATE '>' WITH /*OUT*/ COUNT) WITHIN GROUP (ORDER BY id ),-50 ) s, 
 47    length (listagg(n ON OVERFLOW TRUNCATE '>' WITH /*OUT*/ COUNT) WITHIN GROUP (ORDER BY id ) ) len 
 48  from t where id>=0;

S                                                         LEN
-------------------------------------------------- ----------
------------------------------------------^12>(35)      32744



Это хорошо? Это плохо?

>>>никогда не работал с EXTENDED
Всё когда-то делается впервые :-)


имхо
ето неакуратно

Код: plsql
1.
2.
3.
4.
5.
SQL> select 32767-32744 from dual;

32767-32744
-----------
         23



в строку listagg могло еще поместится "примерно" 23 значения
оракля мог их включить в результат, но замного (35строк) обрезал (TRUNCATE)

типа +-

-----^1234567890abcdefghijklmn>(12)

та ж история с 18-кой, правда я пробовал на 4000

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032559
ASNexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

Из описания функции LISTAGG в Oracle Database SQL Language Reference, 19c , но, я думаю, что принцип в разных версиях одинаковый:

If you specify WITH COUNT , then after the truncation indicator, the database
appends the number of truncated values, enclosed in parentheses. In this case,
the database truncates enough measure values to allow space in the return value
for a final delimiter, the truncation indicator, and 24 characters for the number
value enclosed in parentheses
.

Хорошо это или плохо, но такое поведение соответствует документации.
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032561
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot ASNexus#22256992Хорошо это или плохо, но такое поведение соответствует документации.[/quot]
Всё, что соответствует документации - это хорошо!
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032575
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus

Всё, что соответствует документации - это хорошо!


мож и хорошо

но всеравно берет немножко больше 24-х characters для value enclosed in parentheses
что есть не очень гут

....
stax
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032696
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
SQL*Plus

Всё, что соответствует документации - это хорошо!

мож и хорошо

но все равно берет немножко больше 24-х characters для value enclosed in parentheses
что есть не очень гут

Хотя это все же гудовее, чем бэдовее.
Соответствие доке - это более лудше, а противоречие доке - это менее лудче.

Вполне нормально всё тут.
Читай доку и используй разные фичи ин аккорданс с ней!
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032810
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus

Вполне нормально всё тут.

в доке
and 24 characters for the number value enclosed in parentheses.
а по факту отрезает/резервирует больше, да и пусть

оглашайте следующую фичу

....
stax
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032818
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
оглашайте следующую фичу


Надо слелать
Времянки и коллекции а ля мсскл (дополнительно к существующим)
+=
Произведение групп баем


Хотя можно и не делать, но было бы неплохо
...
Рейтинг: 0 / 0
Oracle Database 21c. SQL. New Features
    #40032823
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
Stax
оглашайте следующую фичу


Надо слелать
Времянки и коллекции а ля мсскл (дополнительно к существующим)
+=
Произведение групп баем


Хотя можно и не делать, но было бы неплохо
хотя намного больше надо в мсскл триггера и фор-луп как в Оракле :))
...
Рейтинг: 0 / 0
54 сообщений из 54, показаны все 3 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle Database 21c. SQL. New Features
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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