powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle Database 21c. SQL. New Features
25 сообщений из 54, страница 1 из 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
25 сообщений из 54, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle Database 21c. SQL. New Features
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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