powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oarcle 12C и корреляция
3 сообщений из 3, страница 1 из 1
Oarcle 12C и корреляция
    #39514260
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется до меня дошло почему в 12C проходит корреляция на бoлее чем один уровень. Вначале я считал это традиционной болезнью роста. И в 10G и в 11G это проходило в release 1 а release 2 исправлялось. Однако в 12C корреляция на бoлее чем один уровень проходит и в 12.2 что заставило задуматься. В 12C Oracle добавил поддержку top-N queries:

Код: plsql
1.
2.
3.
[ OFFSET offset { ROW | ROWS } ]
[ FETCH { FIRST | NEXT } [ { rowcount | percent PERCENT } ]
    { ROW | ROWS } { ONLY | WITH TIES } ]



Возмем:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select  dname,
        (
         select  ename
           from  emp e
           where e.deptno = d.deptno
           order by ename
           fetch first 1 rows only
        ) ename
  from  dept d
/

DNAME          ENAME
-------------- ----------
ACCOUNTING     CLARK
RESEARCH       ADAMS
SALES          ALLEN
OPERATIONS



А теперь посмотрим что под капотому top-N query:

Код: 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.
set long 10000
variable c clob
begin
    dbms_utility.expand_sql_text(Q'[select  dname,
        (
         select  ename
           from  emp e
           where e.deptno = d.deptno
           order by ename
           fetch first 1 rows only
        ) ename
  from  dept d]',:c);
end;
/
 print c

C
--------------------------------------------------------------------------------

SELECT  "A1"."DNAME" "DNAME",
        (
         SELECT  "A2"."ENAME" "ENAME"
           FROM  (
                  SELECT  "A3"."ENAME" "ENAME",
                          "A3"."ENAME" "rowlimit_$_0",
                          ROW_NUMBER() OVER ( ORDER BY "A3"."ENAME") "rowlimit_$$_rownumber"
                    FROM  "SCOTT"."EMP" "A3"
                    WHERE "A3"."DEPTNO"="A1"."DEPTNO"
                 ) "A2"
           WHERE "A2"."rowlimit_$$_rownumber"<=1
        ) "ENAME"
  FROM  "SCOTT"."DEPT" "A1"
/



И вот она корреляция с прыжком на два уровня вверх. Так-что похоже (во всяком случае de-facto) ограничение снято.

SY.
...
Рейтинг: 0 / 0
Oarcle 12C и корреляция
    #39514310
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

Ну необходимость функционала под капотом не обязательно должна обеспечивать доступность функционала для писателей кода. Так, латералы под капотом появились c девятки, с появлением ANSI синтаксиса, а официально для разработчиков стали доступны в 12с.

Мы же обсуждали похожее уже 18605145 . Глубину постепенно увиличивают. И то, что в том топике я демонстировал как баги на 12.1, уже корректно работает на 12.2.

Если немного пофанатазировать таки можно выдумать пример, когда внешний идентификатор перестанет быть виден, но интересны случаи с неколькими уровнями вложенности, когда внешний идентификатор преобразуется в связываемую переменную . Я про это писал в книге 20541880 , раздел "Ограничения подзапросов", страница 138.
Так вот, использование операторов для реализации логики подобных глубоких корреляций вместо подзапросов представляется мне практически идентичной - в оператор параметры будут переданы как связываемые переменные (ну, конечно, в случае оператора будут множественные выполнения вспомогательного курсора).
Я полагаю, что Оракл движется в том направлении чтоб сколь угодно хитрую и вложенную логику можно было реализовать подзапросом не прибегая к PL/SQL.
...
Рейтинг: 0 / 0
Oarcle 12C и корреляция
    #39514355
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopНу необходимость функционала под капотом не обязательно должна обеспечивать доступность функционала для писателей кода.

Конечно, но тогда придется писать изменения к парсеру. Пока-что Oracle похоже просто переписывает SQL (expand sql text, ANSI в native, etc.) и передает парсеру.

SY.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oarcle 12C и корреляция
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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