powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle Database 12c. Новые возможности языка SQL
234 сообщений из 234, показаны все 10 страниц
Oracle Database 12c. Новые возможности языка SQL
    #38328444
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, уважаемые коллеги!

Как вы уже знаете, 1 июля 2013 г. была выпущена новая версия СУБД Oracle Database 12c (12.1.0.1)

Предлагаю в этой теме показывать и обсуждать новые возможности языка Oracle SQL,
появившиеся в этой самой новой версии СУБД Oracle.

Это поможет всем нам быстрее узнать о существовании этих новых функциональных возможностей,
разобраться с тем, как они работают и понять где их уместно применять.


Для затравки:
Использование последовательностей в DEFAULT

В Oracle SQL 12с существенно расширены функции,
реализуемые фразой DEFAULT при определении столбцов таблиц.



Как вы видите в качестве значения по умолчанию может быть использовано выражение.
А выражением может быть следующее (NEXTVAL) и текущее (CURRVAL) значение последовательности.

Ниже привожу пример (скрипт прилагается):
Код: 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.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit ProductionSQL> 

SQL> CREATE SEQUENCE sq_dept_seq START WITH 10 INCREMENT BY 10;
Sequence created.

SQL> CREATE SEQUENCE sq_emp_seq START WITH 8001;
Sequence created.

SQL> CREATE TABLE sq_dept(
  2  	deptno	NUMBER(2) DEFAULT sq_dept_seq.NEXTVAL
  3   , dname	VARCHAR2(14 CHAR)
  4   , loc	VARCHAR2(13 CHAR)
  5   , CONSTRAINT sq_dept#p
  6  	   PRIMARY KEY(deptno));
Table created.

SQL> CREATE TABLE sq_emp(
  2  	empno	  NUMBER(4) DEFAULT sq_emp_seq.NEXTVAL
  3   , ename	  VARCHAR2(10 CHAR)
  4   , job	  VARCHAR2(9 CHAR)
  5   , mgr	  NUMBER(4)
  6   , hiredate  DATE
  7   , sal	  NUMBER(7,2)
  8   , comm	  NUMBER(7,2)
  9   , deptno	  NUMBER(2) DEFAULT ON NULL sq_dept_seq.CURRVAL
 10   , CONSTRAINT sq_emp#p
 11  	   PRIMARY KEY(empno)
 12   , CONSTRAINT sq_deptno#R#sq_dept
 13  	   FOREIGN KEY(deptno)
 14  	   REFERENCES sq_dept(deptno));
Table created.

/*
при вставке данных в таблицы SQ_DEPT и SQ_EMP 
в соответствующих командах INSERT
не указываем столбец номера отдела DEPTNO - 
эти значения будут автоматически получены 
из последовательности с использованием
sq_emp_seq.NEXTVAL и sq_emp_seq.CURRVAL
*/

SQL> -- ACCOUNTING dept
SQL> INSERT INTO sq_dept(DNAME, LOC)
  2  VALUES('ACCOUNTING', 'NEW YORK');
1 row created.

SQL> INSERT INTO sq_emp(EMPNO, ENAME, JOB, HIREDATE, SAL, DEPTNO)
  2  Values(
  3  	7839, 'KING', 'PRESIDENT', TO_DATE('11/17/1981', 'MM/DD/YYYY')
  4   , 5000, 10);
1 row created.

SQL> INSERT INTO sq_emp
  2  	(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL)
  3   Values
  4  	(7782, 'CLARK', 'MANAGER', 7839, TO_DATE('06/09/1981', 'MM/DD/YYYY'), 2450);
1 row created.

SQL> INSERT INTO sq_emp
  2  	(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL)
  3   Values
  4  	(7934, 'MILLER', 'CLERK', 7782, TO_DATE('01/23/1982', 'MM/DD/YYYY'), 1300);
1 row created.


SQL> -- RESEARCH dept
SQL> INSERT INTO sq_dept(DNAME, LOC)
  2  VALUES('RESEARCH', 'DALLAS');
1 row created.

SQL> INSERT INTO sq_emp
  2  	(EMPNO, ENAME, JOB, MGR, HIREDATE,
  3  	 SAL, DEPTNO)
  4   Values
  5  	(7566, 'JONES', 'MANAGER', 7839, TO_DATE('04/02/1981', 'MM/DD/YYYY'),
  6  	 2975, 20);
1 row created.

SQL> INSERT INTO sq_emp
  2  	(EMPNO, ENAME, JOB, MGR, HIREDATE,
  3  	 SAL, DEPTNO)
  4   Values
  5  	(7902, 'FORD', 'ANALYST', 7566, TO_DATE('12/03/1981', 'MM/DD/YYYY'),
  6  	 3000, 20);
1 row created.

SQL> INSERT INTO sq_dept(DNAME, LOC)
  2  VALUES('SALES', 'CHICAGO');
1 row created.

-- Явно задаем значение DEPTNO. В этом случае последовательность изменяться не будет.
SQL> INSERT INTO sq_dept(deptno, DNAME, LOC)
  2  VALUES(40, 'OPERATIONS', 'BOSTON');
1 row created.

SQL> COMMIT;
Commit complete.

SQL> SELECT * FROM sq_dept;

    DEPTNO DNAME          LOC                                                                                                                                                                           
---------- -------------- -------------                                                                                                                                                                 
        10 ACCOUNTING     NEW YORK                                                                                                                                                                      
        20 RESEARCH       DALLAS                                                                                                                                                                        
        30 SALES          CHICAGO                                                                                                                                                                       
        40 OPERATIONS     BOSTON   

-- Проверим текущее значение последовательности
SQL> SELECT sq_dept_seq.CURRVAL FROM dual;

   CURRVAL
----------
        30                                                                                                                                                                     

SQL> SELECT * FROM sq_emp;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                                                                   
---------- ---------- --------- ---------- --------- ---------- ---------- ----------                                                                                                                   
      7839 KING       PRESIDENT            17-NOV-81       5000                    10                                                                                                                   
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10                                                                                                                   
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10                                                                                                                   
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20                                                                                                                   
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20                                                                                                                   
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328453
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринский,

А это не опасно - CURRVAL указывать? Если в сессии INSERT INTO sq_emp будет первой командой - мы рискуем получить ошибку. Хотя.... наверно и правильно.

Прикольно.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328458
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Воронцов,

CURRVAL я специально использовал, чтобы показать,
как это использовать, чтобы "привязать" сотрудников
к только что созданному отделу.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328462
Павел ВоронцовА это не опасно - CURRVAL указывать? Если в сессии INSERT INTO sq_emp будет первой командой - мы рискуем получить ошибку. Хотя.... наверно и правильно.

Возможно, нельзя использовать CURRVAL в определении столбца без определения NEXTVAL в предыдущих столбцах.
Это было бы логично.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328465
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринский,
странно читать о маленькой части того что добавили... а как же identity_clause? или как насчет ограничений с правами на последовательности? где пример с ошибкой в случае отсутствия прав?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328467
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринский,

так же довольно интересно выглядит применимость identity_clause.
На сколько понял, то в этом случае для столбца строится свой "персональный сиквенс".
Не совсем правда понимаю его смысл при наличии возможности указать в default нормальный сиквенс.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328471
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pravednik,
ну так введение identity_clause это чтобы честно можно было сказать что мы не хуже всяких mssqlей)))
имхо граблей только добавиться. как и скрытых багов....
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328473
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По мнению Тома Кайта, которое он высказал вчера 10 июля 2013 г.
в ходе Launch Webcast: Plug into the Cloud with Oracle Database 12c
список Top 12 New Features of Oracle Database 12c
выглядит так:
Top 12 New Features of Oracle Database 12c by Thomas Kyte 1. PL/SQL functions in SELECT With Clause
2. Improved DEFAULT (Sequences & Identities)
3. VARCHAR2(32767 BYTE)
4. SELECT ... SAMPLE ... TOP 10
5. W-shape in SQL
6. Partitioning improvement
7. Adaptive Execution Plans
8. Enhanced Statistics
9. Temporary Undo
10. Adaptive Data Optimization (Heat Map)
11. Application Continuity & Transaction Guard
12. Pluggable Databases
Запись должна быть доступна после регистрации (мне она доступна)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328480
Фотография Изя Кацман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фвафвыаываывПавел ВоронцовА это не опасно - CURRVAL указывать? Если в сессии INSERT INTO sq_emp будет первой командой - мы рискуем получить ошибку. Хотя.... наверно и правильно.Возможно, нельзя использовать CURRVAL в определении столбца без определения NEXTVAL в предыдущих столбцах.
Это было бы логично.Сероникий камрад!
Ты ляпнул полную хрень. Подумай еще. И лучше делать это головой :)

В примере все хорошо видно, что и как, ИМХО
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328484
Гламурный черт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фвафвыаываывв предыдущих столбцах

"Предыдущих" это сильно. Да.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328487
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VintВалерий Юринский,
странно читать о маленькой части того что добавили... а как же identity_clause? или как насчет ограничений с правами на последовательности? где пример с ошибкой в случае отсутствия прав?А почему странно? Что не так?

identity_clause? Разберитесь с ней и расскажите нам.

Для того я и создал эту тему, чтобы по очереди и вместе разбираться с новинками Oracle 12c SQL! :-)

как насчет ограничений с правами на последовательности? где пример с ошибкой в случае отсутствия прав?

Таблица не создастся, если прав не будет на последовательность. И всё.

Больше оптимизма и непраздного любопытства! :-)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328492
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintpravednik,
ну так введение identity_clause это чтобы честно можно было сказать что мы не хуже всяких mssqlей)))
имхо граблей только добавиться. как и скрытых багов....Неее... Это для безболезненного портирования с эмэс суля приложений. Дядя Том же говорил, что именно так Оракл собирается покорить вселенную подмять под себя конкурентов. Ну то есть он так не говорил, он говорил, что активно пишутся трансляторы в PL/SQL со всевозможных диалектов.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328495
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий ЮринскийИ всё.
А вдруг revoke?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328501
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousВалерий ЮринскийИ всё.
А вдруг revoke?А друг такой REVOKE не пройдет из-за того, что последовательность использована в DEFAULT у таблицы?!

Вы же проведете соответствующий эксперимент?!
А потом расскажете нам! Ага?! :-)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328509
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринский,
создайте сиквенс, создайте таблицу с заполнением из этого сиквенса. дайте права на инсерт в эту таблицу другой схеме. попробуйте вставить. это все следует просто из прочтения документации. где об этом ясно по аглицки написано.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328535
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий ЮринскийПавел Воронцов,

CURRVAL я специально использовал, чтобы показать,
как это использовать, чтобы "привязать" сотрудников
к только что созданному отделу.
ага. а если отдел инсертнули и откатили.
имхо, при том, что всё тут ясно - мутная (в смысле пользы) штука
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328629
orawishВалерий ЮринскийПавел Воронцов,

CURRVAL я специально использовал, чтобы показать,
как это использовать, чтобы "привязать" сотрудников
к только что созданному отделу.
ага. а если отдел инсертнули и откатили.
имхо, при том, что всё тут ясно - мутная (в смысле пользы) штукада уж, сесть жопой на грабли и еще получить палкой по лбу.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328679
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ретурнинг прозрачнееorawishпропущено...

ага. а если отдел инсертнули и откатили.
имхо, при том, что всё тут ясно - мутная (в смысле пользы) штукада уж, сесть жопой на грабли и еще получить палкой по лбу.При такой конфигурации граблей пострадает не только жопа и лоб. И это еще обидней.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328694
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий ЮринскийПавел Воронцов,

CURRVAL я специально использовал, чтобы показать,
как это использовать, чтобы "привязать" сотрудников
к только что созданному отделу.Чтобы привязать сотрудников к вновь созданному отделу лучше использовать RETURNING
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328742
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Валерий Юринскийidentity_clause? Разберитесь с ней и расскажите нам.да тут в общем-то ничего особенного: создается обычный сиквенс ISEQ$$_XXX где XXX - object_id таблицы, он отображается и в планах:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL_ID  fn5tjw6hu0dtn, child number 0
-------------------------------------
insert into xt_identity (description) values('1')

Plan hash value: 3838626111

--------------------------------------------------------------------------------------------------
| Id  | Operation                | Name         | Starts | Cost  | A-Rows |   A-Time   | Buffers |
--------------------------------------------------------------------------------------------------
|   0 | INSERT STATEMENT         |              |      1 |     1 |      0 |00:00:00.01 |      35 |
|   1 |  LOAD TABLE CONVENTIONAL |              |      1 |       |      0 |00:00:00.01 |      35 |
|   2 |   SEQUENCE               | ISEQ$$_91720 |      1 |       |      1 |00:00:00.01 |       4 |
--------------------------------------------------------------------------------------------------

рекурсивных "select ISEQ$$_XXX.nextval() from dual" как в приравнивание в pl/sql он не порождает
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328752
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
кстати интересен момент вызова:
Код: 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.
SQL> insert into xt_default(pad) values(null);

1 row created.

SQL> roll;
Rollback complete.
SQL> select xt_sq.currval from dual;

   CURRVAL
----------
         1

SQL> insert into xt_default(pad) values(1/0);
insert into xt_default(pad) values(1/0)
                                    *
ERROR at line 1:
ORA-01476: divisor is equal to zero


SQL> select xt_sq.currval from dual;

   CURRVAL
----------
         2

SQL> insert into xt_default(pad) values(1/0);
insert into xt_default(pad) values(1/0)
                                    *
ERROR at line 1:
ORA-01476: divisor is equal to zero


SQL> select xt_sq.currval from dual;

   CURRVAL
----------
         3

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328754
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
xtenderкстати интересен момент вызова:забыл написать, что это был пример с default xt_sq.nextval
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38328765
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
все Identity можно посмотреть в DBA_TAB_IDENTITY_COLS
а имена сами сиквенсы в
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select i.*
      ,tab.owner       tab_owner
      ,tab.object_name tab_name
      ,sq.object_name  sequence_name
from sys.idnseq$ i
    ,dba_objects tab
    ,dba_objects sq
where tab.object_id=i.obj#
  and sq.object_id = i.seqobj#
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329339
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderВалерий Юринскийidentity_clause? Разберитесь с ней и расскажите нам.да тут в общем-то ничего особенного:...А покажите, пожалуйста, скрипт по созданию таблицы с Identity...
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329351
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синтаксические диаграммы для Identity

identity_clause::=


identity_options::=
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329392
Фотография essbase.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринский,

А можно пример по первому номеру ?

>> PL/SQL functions in SELECT With Clause
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329402
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
essbase.ru,

Вот будет интересно: http://jonathanlewis.wordpress.com/2013/07/01/12c-determinism/
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329502
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
essbase.ruВалерий Юринский,
А можно пример по первому номеру ?
>> PL/SQL functions in SELECT With ClauseVj;yj!

Djn jy^

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL*Plus: Release 12.1.0.1.0 Production on Fri Jul 12 14:30:18 2013

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

SQL> WITH                                                                          
FUNCTION str_plus(p_str VARCHAR2) RETURN VARCHAR2
IS
BEGIN
   RETURN p_str || '+';
END;
--
SELECT tname, str_plus(tname) FROM tab WHERE ROWNUM <= 2;   
/

TNAME           STR_PLUS(TNAME)
---------------- -------------------------
ACCESS$     ACCESS$+
ACLMV$      ACLMV$+

Выделил версию SQL*Plus 12.1.0.1.0,
чтобы подчеркнуть, что старый SQL*Plus такого выполнить не может.

Выделенная ';' ("точка с запятой") в конце команды SELECT необязательна (может быть, может не быть)

А вот '/' ("правый слэш") в конце команды обязателен (выделено желтым).
Иначе SQL*Plus 12.1 не понимает, что команда завершена и ждет (независимо от наличия ';').

Пример WITH + FUNCTION из документации
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH
FUNCTION get_domain(url VARCHAR2) RETURN VARCHAR2 IS
   pos BINARY_INTEGER;
   len BINARY_INTEGER;
BEGIN
   pos := INSTR(url, 'www.');
   len := INSTR(SUBSTR(url, pos + 4), '.') - 1;
   RETURN SUBSTR(url, pos + 4, len);
END;
SELECT DISTINCT get_domain(catalog_url)
FROM product_information;
/


...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329511
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправка.

Это
Валерий ЮринскийVj;yj!

Djn jy^
Следует читать:
Валерий ЮринскийМожно!

Вот он:
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329513
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно переключения контекста страшно-страшно (и весьма раздуваемом рядом людей), но вот эту фичу я считаю не самой важной, ибо основная ценность функций, чтобы их использовала вся команда, а не отдельный разработчик в своём селекте. А так как каждый будет лабать функции в своих вьюхах, вместо того, чтобы взять то, что уже написано до них...
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329529
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderessbase.ru,

Вот будет интересно: http://jonathanlewis.wordpress.com/2013/07/01/12c-determinism/
да уж, да уж. есть где порезвиться.

спасибо!
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329531
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShtockКонечно переключения контекста страшно-страшно (и весьма раздуваемом рядом людей), но вот эту фичу я считаю не самой важной, ибо основная ценность функций, чтобы их использовала вся команда, а не отдельный разработчик в своём селекте. А так как каждый будет лабать функции в своих вьюхах, вместо того, чтобы взять то, что уже написано до них...Поддерживаю.
Хотя по-моему просто реализация идиотская.
ИМХО лучше бы придумали ключевое слово типа embedded, чтоб функция могла встраиваться в запрос.
Есс-но на функцию накладывались бы дополнительные ограничения. И потом оно в кишках10053 преобразуется хоть в with function хоть во что-то еще.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329547
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
счастливые обладатели 12с, попробуйте три запросика выполнить.
(синтаксис там правда старый, но уж очень любопытен новый результат )
Код: 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.
select 1 from dual
 union
select 1 from dual
 order by dbms_random.value;
 
with da as (select /*+ materialize*/ 1 A from dual)
    ,db as (select /*+ inline*/ 1 B from dual)
select grouping(a),a ,grouping(b),b
  from da,db group by grouping sets(a,b,(a,b),());

select 'Wrong! :((' Res ,grouping(a),a ,grouping(b),b
  from ( select 1 A ,1 B from dual
) group by grouping sets((a,b),a,b,())
union all
select 'Wrong too! :((' ,grouping(a),a ,grouping(b),b
  from ( select 1 A ,2 B from dual
) group by grouping sets((a,b),a,b,())
union all
select 'Wrong again! :((' ,grouping(a),a ,grouping(b),b
  from ( select count(*) A ,count(*) B from dual
) group by grouping sets((a,b),a,b,())
union all
select 'True! :))' ,grouping(a),a ,grouping(b),b
  from ( select 1 A ,count(*) B from dual
) group by grouping sets((a,b),a,b,())
union all
  select 'True too! :))' ,grouping(a),a ,grouping(b),b
    from ( select count(dummy) A ,count(*) B from dual
) group by grouping sets((a,b),a,b,())
union all
  select 'True again! :))' ,grouping(a),a ,grouping(b),b
    from ( select count(distinct dummy) A,count(dummy) B from dual
) group by grouping sets((a,b),a,b,())
;
   

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329558
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
orawish,

Могу дать доступ к своей тестовой
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329563
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ShtockКонечно переключения контекста страшно-страшно (и весьма раздуваемом рядом людей), но вот эту фичу я считаю не самой важной, ибо основная ценность функций, чтобы их использовала вся команда, а не отдельный разработчик в своём селекте. А так как каждый будет лабать функции в своих вьюхах, вместо того, чтобы взять то, что уже написано до них...ага, я про это же писал тут на форуме, когда Кайтовскую презентацию обсуждали. На самом деле применения полезные найти можно, но вот переключения контекста все равно имхо будут, если в функции другие процедуры/функции использовать будешь. Вечерком проверю...
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329565
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shtock,
дело не в переключении контекста, а все в том же несогласованном результате. я уже представляю толпы молодняка лабаюших функции в запросах, потому что это стало можно.... вытирай потом за ними... понатопчють тут....

orawish
почему то уверен, что результат остался такой же магический)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329576
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderorawish,

Могу дать доступ к своей тестовой
спасибо, но (пока :) не горит

VintShtock,
..
orawish
почему то уверен, что результат остался такой же магический)
:)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329586
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Отдельно интересно чьи функции будут выполняться PL/SQL-ные или SQL'ные при наличии обоих, типа LPAD, который имеет как pl/sql-ную так и SQL'ную версии
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329613
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderОтдельно интересно чьи функции будут выполняться PL/SQL-ные или SQL'ные при наличии обоих, типа LPAD, который имеет как pl/sql-ную так и SQL'ную версии
ну так - оно проверябельно.

однако, имхо, внутри тела функции - pl/sql-ные, в sql-коде sql-ные.
кроме явных
Код: plsql
1.
select sys.standard.lpad(1,2,3) from dual;
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329624
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderОтдельно интересно чьи функции будут выполняться PL/SQL-ные или SQL'ные при наличии обоих, типа LPAD, который имеет как pl/sql-ную так и SQL'ную версии
with_clause::=


plsql_declarations::=

plsql_declarationsThe plsql_declarations clause lets you declare and define PL/SQL functions and
procedures. You can then reference the PL/SQL functions in the query in which you
resolution, these function names have precedence over schema-level stored functions .

If the query in which you specify this clause is not a top-level SELECT statement, then
the following rules apply to the top-level SQL statement that contains the query:
If the top-level statement is a SELECT statement, then it must have either a WITH plsql_declarations clause or the WITH_PLSQL hint.

If the top-level statement is a DELETE, MERGE, INSERT, or UPDATE statement, then it must have the WITH_PLSQL hint.

The WITH_PLSQL hint only enables you to specify the WITH plsql_declarations clause
within the statement. It is not an optimizer hint.



Но у стандартных SQL-функций приоритет выше, чем у функций, заданных в plsql_declarations!

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> WITH
  2  FUNCTION LOWER(p_str VARCHAR2) RETURN VARCHAR2
  3  IS
  4  BEGIN
  5     RETURN p_str || '+';
  6  END;
  7  --
  8  SELECT tname, LOWER(tname) FROM tab WHERE ROWNUM <= 2;
  9  /

TNAME       LOWER(TNAME)
------------- ----------------------
BONUS       bonus
DEPT        dept


Ошибки не возникает, но работает стандартная SQL-функция.

И это хорошо!
Должно же быть что-то незыблемое и постоянное! :-)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329629
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
orawishну так - оно проверябельно.ага, вечерком проверю - отсюда доступа к тестовой своей не имею
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329638
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Валерий Юринский Но у стандартных SQL-функций приоритет выше, чем у функций, заданных в plsql_declarations! я не про это говорил, а про
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with function blabla(p_str VARCHAR2) RETURN VARCHAR2
IS
BEGIN
   RETURN lpad(...);
END;
--
SELECT tname, blabla(tname) FROM tab WHERE ROWNUM <= 2;
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329646
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishсчастливые обладатели 12с, попробуйте три запросика выполнить.
(синтаксис там правда старый, но уж очень любопытен новый результат )
Код: 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.
select 1 from dual
 union
select 1 from dual
 order by dbms_random.value;
 
with da as (select /*+ materialize*/ 1 A from dual)
    ,db as (select /*+ inline*/ 1 B from dual)
select grouping(a),a ,grouping(b),b
  from da,db group by grouping sets(a,b,(a,b),());

select 'Wrong! :((' Res ,grouping(a),a ,grouping(b),b
  from ( select 1 A ,1 B from dual
) group by grouping sets((a,b),a,b,())
union all
select 'Wrong too! :((' ,grouping(a),a ,grouping(b),b
  from ( select 1 A ,2 B from dual
) group by grouping sets((a,b),a,b,())
union all
select 'Wrong again! :((' ,grouping(a),a ,grouping(b),b
  from ( select count(*) A ,count(*) B from dual
) group by grouping sets((a,b),a,b,())
union all
select 'True! :))' ,grouping(a),a ,grouping(b),b
  from ( select 1 A ,count(*) B from dual
) group by grouping sets((a,b),a,b,())
union all
  select 'True too! :))' ,grouping(a),a ,grouping(b),b
    from ( select count(dummy) A ,count(*) B from dual
) group by grouping sets((a,b),a,b,())
union all
  select 'True again! :))' ,grouping(a),a ,grouping(b),b
    from ( select count(distinct dummy) A,count(dummy) B from dual
) group by grouping sets((a,b),a,b,())
;


новый результат
Код: 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.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
SQL> @orawish
SQL> SET ECHO ON;
SQL> SET TIMING ON;
SQL> 
SQL> CONNECT SCOTT/TIGER@PDBORCL
Connected.
SQL> select 1 from dual
  2   union
  3  select 1 from dual
  4   order by dbms_random.value;
select 1 from dual
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 19665
Session ID: 248 Serial number: 1675

/*
В файле трассировки по инциденту имеем:
ORA-07445: exception encountered: 
           core dump [kokmrwo()+173] [SIGSEGV] [ADDR:0x1] [PC:0x199DE6D] 
           [Address not mapped to object] []
*/

SQL> CONNECT SCOTT/TIGER@PDBORCL
Connected.
SQL> with da as (select /*+ materialize*/ 1 A from dual)
  2      ,db as (select /*+ inline*/ 1 B from dual)
  3  select grouping(a),a ,grouping(b),b
  4    from da,db group by grouping sets(a,b,(a,b),());

GROUPING(A)          A GROUPING(B)          B
----------- ---------- ----------- ----------
          0          1           0          1
          1                      0          1
          0          1           1
          1                      1

Elapsed: 00:00:00.36
SQL> 
SQL> CONNECT SCOTT/TIGER@PDBORCL
Connected.
SQL> select 'Wrong! :((' Res ,grouping(a),a ,grouping(b),b
  2    from ( select 1 A ,1 B from dual
  3  ) group by grouping sets((a,b),a,b,())
  4  union all
  5  select 'Wrong too! :((' ,grouping(a),a ,grouping(b),b
  6    from ( select 1 A ,2 B from dual
  7  ) group by grouping sets((a,b),a,b,())
  8  union all
  9  select 'Wrong again! :((' ,grouping(a),a ,grouping(b),b
 10    from ( select count(*) A ,count(*) B from dual
 11  ) group by grouping sets((a,b),a,b,())
 12  union all
 13  select 'True! :))' ,grouping(a),a ,grouping(b),b
 14    from ( select 1 A ,count(*) B from dual
 15  ) group by grouping sets((a,b),a,b,())
 16  union all
 17    select 'True too! :))' ,grouping(a),a ,grouping(b),b
 18      from ( select count(dummy) A ,count(*) B from dual
 19  ) group by grouping sets((a,b),a,b,())
 20  union all
 21    select 'True again! :))' ,grouping(a),a ,grouping(b),b
 22      from ( select count(distinct dummy) A,count(dummy) B from dual
 23  ) group by grouping sets((a,b),a,b,());

RES              GROUPING(A)          A GROUPING(B)          B
---------------- ----------- ---------- ----------- ----------
Wrong! :((                 0          1           0          1
Wrong! :((                 0          1           0          1
Wrong! :((                 0          1           0          1
Wrong! :((                 1          1           1          1
Wrong too! :((             0          1           0          2
Wrong too! :((             0          1           1          2
Wrong too! :((             1                      0          2
Wrong too! :((             1                      1
Wrong again! :((           0          1           0          1
Wrong again! :((           0          1           0
Wrong again! :((           1                      0          1
Wrong again! :((           1                      0
Wrong again! :((           1                      1
True! :))                  0          1           0          1
True! :))                  0          1           1
True! :))                  1                      0          1
True! :))                  1                      1
True too! :))              0          1           0          1
True too! :))              0          1           1
True too! :))              1                      0          1
True too! :))              1                      1
True again! :))            0          1           0          1
True again! :))            0          1           1
True again! :))            1                      0          1
True again! :))            1                      1

25 rows selected.

Elapsed: 00:00:00.07



Ваши комментарии?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329665
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderВалерий Юринский Но у стандартных SQL-функций приоритет выше, чем у функций, заданных в plsql_declarations! я не про это говорил, а про
. . .

Что не так?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> with function blabla(p_str VARCHAR2) RETURN VARCHAR2
  2  IS
  3  BEGIN
  4     RETURN lpad(p_str, 20, '*');
  5  END;
  6  --
  7  SELECT tname, blabla(tname) FROM tab WHERE ROWNUM <= 2;
  8  /

TNAME           BLABLA(TNAME)
--------------- ----------------------------------
BONUS           ***************BONUS
DEPT            ****************DEPT
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329674
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринскийxtenderпропущено...
я не про это говорил, а про
. . .

Что не так?Ага. Понял.
Все так, но нужно как-то понять это была LPAD из SQL или LPAD из PLSQL.

Проведете выяснение, отпишите, пожалуйста.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329723
Фотография Sacramento
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринский
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SQL> @orawish
SQL> SET ECHO ON;
SQL> SET TIMING ON;
SQL> 
SQL> CONNECT SCOTT/TIGER@PDBORCL
Connected.
SQL> select 1 from dual
  2   union
  3  select 1 from dual
  4   order by dbms_random.value;
select 1 from dual
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 19665
Session ID: 248 Serial number: 1675

4 года коту под хвост
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329732
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sacramento4 года коту под хвост
Оракл ссылается на

авторThis is due to the incorrect usage of the DBMS_RANDOM package in the queries.

DBMS_RANDOM cannot be used in the ORDER BY clause for compound queries.
Sorting Query Results
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329734
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sacramento4 года коту под хвост???
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329746
Фотография Sacramento
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pravednikОракл ссылается, нахМогли бы и sqlcode тогда уж зарезервировать. А то что это такое, у меня девелопер повис, снимать в диспечере задач прихордицо. Кудай это годиццо?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329750
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринскийorawishсчастливые обладатели 12с, попробуйте три запросика выполнить..
Ваши комментарии?
запрос 2 выжил и даже дал правильный результат (в 11g ora-03113)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Присоединен к:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> with da as (select /*+ materialize*/ 1 A from dual)
  2      ,db as (select /*+ inline*/ 1 B from dual)
  3  select grouping(a),a ,grouping(b),b
  4    from da,db group by grouping sets(a,b,(a,b),());
with da as (select /*+ materialize*/ 1 A from dual)
                                    *
ошибка в строке 1:
ORA-03113: принят сигнал конца файла по коммуникационному каналу



запрос 3 лажает аналогично 11g, что очевидно из комментария ( который же к результату заранее написан :)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329763
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishзапрос 3 лажает аналогично 11g, что очевидно из комментария ( который же к результату заранее написан :)
Выполнил запрос 3 на Exadata (Oracle Database 11.2.0.3.17)
Код: 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.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management,
OLAP,
Data Mining and Real Application Testing options

SQL > select 'Wrong! :((' Res ,grouping(a),a ,grouping(b),b
  2    from ( select 1 A ,1 B from dual
  3  ) group by grouping sets((a,b),a,b,())
  4  union all
  5  select 'Wrong too! :((' ,grouping(a),a ,grouping(b),b
  6    from ( select 1 A ,2 B from dual
  7  ) group by grouping sets((a,b),a,b,())
  8  union all
  9  select 'Wrong again! :((' ,grouping(a),a ,grouping(b),b
 10    from ( select count(*) A ,count(*) B from dual
 11  ) group by grouping sets((a,b),a,b,())
 12  union all
 13  select 'True! :))' ,grouping(a),a ,grouping(b),b
 14    from ( select 1 A ,count(*) B from dual
 15  ) group by grouping sets((a,b),a,b,())
 16  union all
 17    select 'True too! :))' ,grouping(a),a ,grouping(b),b
 18      from ( select count(dummy) A ,count(*) B from dual
 19  ) group by grouping sets((a,b),a,b,())
 20  union all
 21    select 'True again! :))' ,grouping(a),a ,grouping(b),b
 22      from ( select count(distinct dummy) A,count(dummy) B from dual
 23  ) group by grouping sets((a,b),a,b,())
 24  ;

RES              GROUPING(A)          A GROUPING(B)          B
---------------- ----------- ---------- ----------- ----------
Wrong! :((                 0          1           0          1
Wrong! :((                 0          1           0          1
Wrong! :((                 0          1           0          1
Wrong! :((                 1          1           1          1
Wrong too! :((             0          1           0          2
Wrong too! :((             0          1           1          2
Wrong too! :((             1                      0          2
Wrong too! :((             1                      1
Wrong again! :((           0          1           0          1
Wrong again! :((           0          1           0
Wrong again! :((           1                      0          1
Wrong again! :((           1                      0
Wrong again! :((           1                      1
True! :))                  0          1           0          1
True! :))                  0          1           1
True! :))                  1                      0          1
True! :))                  1                      1
True too! :))              0          1           0          1
True too! :))              0          1           1
True too! :))              1                      0          1
True too! :))              1                      1
True again! :))            0          1           0          1
True again! :))            0          1           1
True again! :))            1                      0          1
True again! :))            1                      1

25 rows selected.

Всё также неправильно?
(Нет времени разбираться в смысле команды, извините)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329790
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SacramentopravednikОракл ссылается, нахМогли бы и sqlcode тогда уж зарезервировать. А то что это такое, у меня девелопер повис, снимать в диспечере задач прихордицо. Кудай это годиццо?
Интересно, к чему это ?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329834
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Проверилxtender, но вот переключения контекста все равно имхо будут, если в функции другие процедуры/функции использовать будешь. Вечерком проверю...будут

xtenderОтдельно интересно чьи функции будут выполняться PL/SQL-ные или SQL'ные при наличии обоих, типа LPAD, который имеет как pl/sql-ную так и SQL'ную версииpl/sql'ную

код теста
Код: 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.
SQL> sho parameter max_string

NAME                                 TYPE         VALUE
------------------------------------ ------------ ------------------------------
max_string_size                      string       STANDARD

SQL> @trace_pl_on

Session altered.

SQL> with
  2  function blabla(p_str varchar2) return varchar2 is
  3  begin
  4   return lpad(p_str, 5000, '*');
  5  end;
  6  select
  7    length(blabla(dummy)) lpad_plsql
  8  from dual;
  9  /
from dual
     *
ERROR at line 8:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 5

SQL> @trace_pl_last.sql

     RUNID  EVENT_SEQ EVENT_COMMENT                    EVENT_UNIT_OWNER   EVENT_UNIT
---------- ---------- -------------------------------- ------------------ -----------
         1          1 PL/SQL Trace Tool started
         1          2 Trace flags changed
         1          3 PL/SQL Virtual Machine started                      <anonymous>
         1          4 PL/SQL Internal Call                                <anonymous>
         1          5 PL/SQL Virtual Machine stopped

SQL> create function blabla2(p_str varchar2) return varchar2 is
  2  begin
  3     return lpad(p_str, 5000, '*');
  4  end;
  5  /

Function created.

SQL> select
  2    length(blabla2(dummy)) lpad_plsql
  3  from dual;
  length(blabla2(dummy)) lpad_plsql
         *
ERROR at line 2:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "XTENDER.BLABLA2", line 3


SQL> select
  2    length(lpad(dummy,5000, '*')) lpad_plsql
  3  from dual;

LPAD_PLSQL
----------
      4000

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329841
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринскийorawishзапрос 3 лажает аналогично 11g, что очевидно из комментария ( который же к результату заранее написан :)
Выполнил запрос 3 на Exadata (Oracle Database 11.2.0.3.17)
Код: 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.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management,
OLAP,
Data Mining and Real Application Testing options

SQL > select 'Wrong! :((' Res ,grouping(a),a ,grouping(b),b
  2    from ( select 1 A ,1 B from dual
  3  ) group by grouping sets((a,b),a,b,())
  4  union all
  5  select 'Wrong too! :((' ,grouping(a),a ,grouping(b),b
  6    from ( select 1 A ,2 B from dual
  7  ) group by grouping sets((a,b),a,b,())
  8  union all
  9  select 'Wrong again! :((' ,grouping(a),a ,grouping(b),b
 10    from ( select count(*) A ,count(*) B from dual
 11  ) group by grouping sets((a,b),a,b,())
 12  union all
 13  select 'True! :))' ,grouping(a),a ,grouping(b),b
 14    from ( select 1 A ,count(*) B from dual
 15  ) group by grouping sets((a,b),a,b,())
 16  union all
 17    select 'True too! :))' ,grouping(a),a ,grouping(b),b
 18      from ( select count(dummy) A ,count(*) B from dual
 19  ) group by grouping sets((a,b),a,b,())
 20  union all
 21    select 'True again! :))' ,grouping(a),a ,grouping(b),b
 22      from ( select count(distinct dummy) A,count(dummy) B from dual
 23  ) group by grouping sets((a,b),a,b,())
 24  ;

RES              GROUPING(A)          A GROUPING(B)          B
---------------- ----------- ---------- ----------- ----------
Wrong! :((                 0          1           0          1
Wrong! :((                 0          1           0          1
Wrong! :((                 0          1           0          1
Wrong! :((                 1          1           1          1
Wrong too! :((             0          1           0          2
Wrong too! :((             0          1           1          2
Wrong too! :((             1                      0          2
Wrong too! :((             1                      1
Wrong again! :((           0          1           0          1
Wrong again! :((           0          1           0
Wrong again! :((           1                      0          1
Wrong again! :((           1                      0
Wrong again! :((           1                      1
True! :))                  0          1           0          1
True! :))                  0          1           1
True! :))                  1                      0          1
True! :))                  1                      1
True too! :))              0          1           0          1
True too! :))              0          1           1
True too! :))              1                      0          1
True too! :))              1                      1
True again! :))            0          1           0          1
True again! :))            0          1           1
True again! :))            1                      0          1
True again! :))            1                      1

25 rows selected.

Всё также неправильно?
(Нет времени разбираться в смысле команды, извините)
абсолютно так же (то есть три первых варианта неправильны , три последние - корректны)
а разбираться - это просто. union тут не при чем, он нужен только чтобы результаты нагляднее сравнивать.
весь смысл теста: выбираем одну строку = два столбца из дуала и считаем grouping sets по a,b,(a,b) и ()
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329848
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
еще вот интересно:
Код: 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.
with 
function blabla(p_str varchar2) return varchar2 is
   s varchar2(32767);
begin
   s:=    lpad(p_str, 100, '1');
   s:= s||lpad(p_str, 100, '2');
   s:= s||lpad(p_str, 100, '3');
   s:= s||lpad(p_str, 100, '4');
   return s;
end;
select 
  length(blabla(dummy)) lpad_plsql
from dual
/
SQL> @trace_pl_last.sql

     RUNID  EVENT_SEQ EVENT_COMMENT                     EVENT_UNIT_OWNER   EVENT_UNIT
---------- ---------- --------------------------------- ------------------ -----------
         3          1 PL/SQL Trace Tool started
         3          2 Trace flags changed
         3          3 PL/SQL Virtual Machine started                       <anonymous>
         3          4 PL/SQL Internal Call                                 <anonymous>
         3          5 PL/SQL Internal Call                                 <anonymous>
         3          6 PL/SQL Internal Call                                 <anonymous>
         3          7 PL/SQL Internal Call                                 <anonymous>
         3          8 PL/SQL Virtual Machine stopped

8 rows selected.

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329861
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ну и просто чтобы дополнить предыдущее:
Код: 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.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
with 
function blabla(p_str varchar2) return varchar2 is
   s varchar2(32767);
begin
   s:=    lpad(p_str, 100, '1');
   s:= s||lpad(p_str, 100, '2');
   s:= s||lpad(p_str, 100, '3');
   s:= s||lpad(p_str, 100, '4');
   return s;
end;
select 
  length(blabla(dummy)) lpad_plsql
from dual
connect by level<=10
/
SQL> @trace_pl_last.sql

     RUNID  EVENT_SEQ EVENT_COMMENT                     EVENT_UNIT_OWNER   EVENT_UNIT
---------- ---------- --------------------------------- ------------------ -----------
         4          1 PL/SQL Trace Tool started
         4          2 Trace flags changed
         4          3 PL/SQL Virtual Machine started                       <anonymous>
         4          4 PL/SQL Internal Call                                 <anonymous>
         4          5 PL/SQL Internal Call                                 <anonymous>
         4          6 PL/SQL Internal Call                                 <anonymous>
         4          7 PL/SQL Internal Call                                 <anonymous>
         4          8 PL/SQL Virtual Machine stopped
         4          9 PL/SQL Virtual Machine started                       <anonymous>
         4         10 PL/SQL Internal Call                                 <anonymous>
         4         11 PL/SQL Internal Call                                 <anonymous>
         4         12 PL/SQL Internal Call                                 <anonymous>
         4         13 PL/SQL Internal Call                                 <anonymous>
         4         14 PL/SQL Virtual Machine stopped
         4         15 PL/SQL Virtual Machine started                       <anonymous>
         4         16 PL/SQL Internal Call                                 <anonymous>
         4         17 PL/SQL Internal Call                                 <anonymous>
         4         18 PL/SQL Internal Call                                 <anonymous>
         4         19 PL/SQL Internal Call                                 <anonymous>
         4         20 PL/SQL Virtual Machine stopped
         4         21 PL/SQL Virtual Machine started                       <anonymous>
         4         22 PL/SQL Internal Call                                 <anonymous>
         4         23 PL/SQL Internal Call                                 <anonymous>
         4         24 PL/SQL Internal Call                                 <anonymous>
         4         25 PL/SQL Internal Call                                 <anonymous>
         4         26 PL/SQL Virtual Machine stopped
         4         27 PL/SQL Virtual Machine started                       <anonymous>
         4         28 PL/SQL Internal Call                                 <anonymous>
         4         29 PL/SQL Internal Call                                 <anonymous>
         4         30 PL/SQL Internal Call                                 <anonymous>
         4         31 PL/SQL Internal Call                                 <anonymous>
         4         32 PL/SQL Virtual Machine stopped
         4         33 PL/SQL Virtual Machine started                       <anonymous>
         4         34 PL/SQL Internal Call                                 <anonymous>
         4         35 PL/SQL Internal Call                                 <anonymous>
         4         36 PL/SQL Internal Call                                 <anonymous>
         4         37 PL/SQL Internal Call                                 <anonymous>
         4         38 PL/SQL Virtual Machine stopped
         4         39 PL/SQL Virtual Machine started                       <anonymous>
         4         40 PL/SQL Internal Call                                 <anonymous>
         4         41 PL/SQL Internal Call                                 <anonymous>
         4         42 PL/SQL Internal Call                                 <anonymous>
         4         43 PL/SQL Internal Call                                 <anonymous>
         4         44 PL/SQL Virtual Machine stopped
         4         45 PL/SQL Virtual Machine started                       <anonymous>
         4         46 PL/SQL Internal Call                                 <anonymous>
         4         47 PL/SQL Internal Call                                 <anonymous>
         4         48 PL/SQL Internal Call                                 <anonymous>
         4         49 PL/SQL Internal Call                                 <anonymous>
         4         50 PL/SQL Virtual Machine stopped
         4         51 PL/SQL Virtual Machine started                       <anonymous>
         4         52 PL/SQL Internal Call                                 <anonymous>
         4         53 PL/SQL Internal Call                                 <anonymous>
         4         54 PL/SQL Internal Call                                 <anonymous>
         4         55 PL/SQL Internal Call                                 <anonymous>
         4         56 PL/SQL Virtual Machine stopped
         4         57 PL/SQL Virtual Machine started                       <anonymous>
         4         58 PL/SQL Internal Call                                 <anonymous>
         4         59 PL/SQL Internal Call                                 <anonymous>
         4         60 PL/SQL Internal Call                                 <anonymous>
         4         61 PL/SQL Internal Call                                 <anonymous>
         4         62 PL/SQL Virtual Machine stopped

62 rows selected.

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329866
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

А приложите еще ваши замечательные скрипты для профайлера
trace_pl_on и trace_pl_last, если не жалко.

Спасибо!
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38329874
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Валерий Юринский,

да это простые совсем:
trace_pl_on.sql
Код: plsql
1.
alter session set events '10938 trace name context forever, level 1';

trace_pl_last.sql
Код: plsql
1.
2.
3.
4.
5.
6.
7.
col event_comment format a80
select 
   runid,event_seq,event_comment,event_unit_owner,event_unit
from plsql_trace_events e
where e.runid=(select max(runid) from plsql_trace_runs)
;
col event_comment clear

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38331687
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,
Спасибо!
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38331732
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У команд http://docs.oracle.com/cd/E16655_01/server.121/e17209/statements_6016.htm#i2067093] CREATE SEQUENCE и ALTER SEQUENCE появились новые фразы, необходимые для использования с другими новыми функциональными возможностями:
KEEP / NOKEEP

SESSION / GLOBAL

KEEP Specify KEEP if you want NEXTVAL to retain its original value during replay for Application Continuity. This behavior will occur only if the user running the application is the owner of the schema containing the sequence. This clause is useful for providing bind variable consistency at replay after recoverable errors. Refer to Oracle Database Development Guide for more information on Application Continuity.

NOKEEP Specify NOKEEP if you do not want NEXTVAL to retain its original value during replay for Application Continuity. This is the default .
Note:The KEEP and NOKEEP clauses apply only to the owner of the schema containing the sequence. You can control whether NEXTVAL retains its original value for other users during replay for Application Continuity by granting or revoking the KEEP SEQUENCE object privilege on the sequence. Refer to Table 18-2 for more information on the KEEP SEQUENCE object privilege.Extracted from Table 18-2
Object Privilege Name Operations Authorized KEEP SEQUENCEThe sequence pseudocolumn NEXTVAL retains its original value during replay for Application Continuity when the grantee is running the application. This privilege is useful for providing bind variable consistency when replaying after recoverable errors.If this privilege is granted or revoked between runtime and failover of a request, then the original value of NEXTVAL is not retained during replay for Application Continuity for that request. Note: This privilege is not granted by the GRANT ALL PRIVILEGES ON sequence statement. You must explicitly grant this privilege. Note: This privilege is part of the DBA role.

SESSION Specify SESSION to create a session sequence, which is a special type of sequence that is specifically designed to be used with global temporary tables that have session visibility. Unlike the existing regular sequences (referred to as "global" sequences for the sake of comparison), a session sequence returns a unique range of sequence numbers only within a session, but not across sessions. Another difference is that session sequences are not persistent. If a session goes away, so does the state of the session sequences that were accessed during the session.

Session sequences must be created by a read-write database but can be accessed on any read-write or read-only databases (either a regular database temporarily open read-only or a standby database).

The CACHE, NOCACHE, ORDER, or NOORDER clauses are ignored when specified with the SESSION clause.
See Also: Oracle Data Guard Concepts and Administration for more information on session sequences
GLOBAL Specify GLOBAL to create a global, or regular, sequence. This is the default .
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38331812
Фотография Sacramento
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринский, расскажыте-ка лучше про brand new know-how lateral inline view , которое всем всегда хотелос сделать, но было низзя.
Но поскольку хотелос очень сильно, то теперь можно. Наглядно, что было, что стало, преимущества, ограничения.
Потому как еще не у всех стоит...
XIIц
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38331831
Фотография essbase.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SacramentoПотому как еще не у всех стоит...
Откуда: from Paris with love
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332059
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, раз сделали варчар более 4000, то как нибудь это учли в log errors и DBMS_ERRLOG.CREATE_ERROR_LOG
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332077
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Shtock,

а что именно должны были учесть?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332086
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Shtock,

create_error_log создает нормально такую же:
Код: 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.
SQL> @param_ scalar%thresh

Name                                     VALUE   TYPE     DESCRIPTION
---------------------------------------- ------- -------- ------------------------------------------------------------
_scalar_type_lob_storage_threshold       5000    number   threshold for VARCHAR2, NVARCHAR2, and RAW storage as BLOB

Elapsed: 00:00:00.14
SQL> select * from user_lobs;

no rows selected

Elapsed: 00:00:00.38
SQL> create table t(v5001 varchar2(5001));

Table created.

SQL> select * from user_lobs;

TABLE_NAME                     COLUMN_NAME     SEGMENT_NAME                   TABLESPACE_NAME  
------------------------------ --------------- ------------------------------ -----------------
T                              V5001           SYS_LOB0000091706C00001$$      USERS            

SQL> exec dbms_errlog.create_error_log ('T','T_ERR');

PL/SQL procedure successfully completed.

SQL> select * from user_lobs;

TABLE_NAME                     COLUMN_NAME     SEGMENT_NAME                   TABLESPACE_NAME  
------------------------------ --------------- ------------------------------ -----------------
T                              V5001           SYS_LOB0000091706C00001$$      USERS            
T_ERR                          V5001           SYS_LOB0000091709C00006$$      USERS            

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332217
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>а что именно должны были учесть?

что данные длинные, вероятность того, что суровые индусские парни что-либо забыли очень высока :)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332223
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринский,
вопросик насчет инлайн функций (в кляузе with)
можно ли в with использовать pipelined ф-ции без предварительного создания табличного типа?

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332238
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
stax..Валерий Юринский,
вопросик насчет инлайн функций (в кляузе with)
можно ли в with использовать pipelined ф-ции без предварительного создания табличного типа?

.....
staxкак тогда декларировать в return надо было бы? :)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332280
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
xtender
Код: plsql
1.
_scalar_type_lob_storage_threshold

про этот параметр
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332335
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,
Давайте такую функцию. Проверю, что и как... :-)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332358
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как насчет факторинга внутри факторинга?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with t2 as (
  with t as (select * from dual) select * from t
) select * from t2;

with t2 as (
  select * from (with t as (select * from dual) select * from t)
) select * from t2;


по прежнему что ли?
Код: plsql
1.
ORA-32034: не поддерживается использование фразы WITH
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332365
usolcew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender,

отличная находка, Саян!
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332488
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринскийstax..,
Давайте такую функцию. Проверю, что и как... :-)
я не подумал, ведь ф-цию надо создавать в package для определения pl/sql типа, а такого в with нет

снимаю вопрос

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332517
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,
кстати, ты не пробовал нарастающий итог через пайп функцию написать на новом pl\sql with?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332665
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
usolcew,

спасибо, Игорь, мне как раз это ограничение покоя не давало - ведь иначе это фактически было бы как старый способ, когда разделяют одно поле на два: варчар и клоб
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332666
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Vint,

без динамических типов с видимостью только внутри одного запроса такие вещи в принципе писать неинтересно :)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332675
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

да мне только скорость была интересна. ничего, скоро мне тестовую поставят - начну изучать)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332678
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Не знаю нужно ли говорить, но extended datatypes передаются как обычные, а не как clob'ы по локатору
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332688
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishа как насчет факторинга внутри факторинга?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with t2 as (
  with t as (select * from dual) select * from t
) select * from t2;

with t2 as (
  select * from (with t as (select * from dual) select * from t)
) select * from t2;


по прежнему что ли?
Код: plsql
1.
ORA-32034: не поддерживается использование фразы WITH


Да, по-прежнему имеем
ORA-32034: unsupported use of WITH clause
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SQL*Plus: Release 12.1.0.1.0 Production on Tue Jul 16 13:29:19 2013

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

SQL> @with_with_with

SQL> with t2 as (
  2    with t as (select * from dual) select * from t
  3  ) select * from t2;
  with t as (select * from dual) select * from t
  *
ERROR at line 2:
ORA-32034: unsupported use of WITH clause

SQL> with t2 as (
  2    select * from (with t as (select * from dual) select * from t)
  3  ) select * from t2;
  select * from (with t as (select * from dual) select * from t)
                 *
ERROR at line 2:
ORA-32034: unsupported use of WITH clause

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332691
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринскийorawishа как насчет факторинга внутри факторинга?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with t2 as (
  with t as (select * from dual) select * from t
) select * from t2;

with t2 as (
  select * from (with t as (select * from dual) select * from t)
) select * from t2;


по прежнему что ли?
Код: plsql
1.
ORA-32034: не поддерживается использование фразы WITH


Да, по-прежнему имеем
ORA-32034: unsupported use of WITH clause
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SQL*Plus: Release 12.1.0.1.0 Production on Tue Jul 16 13:29:19 2013

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

SQL> @with_with_with

SQL> with t2 as (
  2    with t as (select * from dual) select * from t
  3  ) select * from t2;
  with t as (select * from dual) select * from t
  *
ERROR at line 2:
ORA-32034: unsupported use of WITH clause

SQL> with t2 as (
  2    select * from (with t as (select * from dual) select * from t)
  3  ) select * from t2;
  select * from (with t as (select * from dual) select * from t)
                 *
ERROR at line 2:
ORA-32034: unsupported use of WITH clause


и это очень,очень жаль :(
спасибо!
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332699
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishВалерий Юринскийпропущено...

Да, по-прежнему имеем
ORA-32034: unsupported use of WITH clause
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SQL*Plus: Release 12.1.0.1.0 Production on Tue Jul 16 13:29:19 2013

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

SQL> @with_with_with

SQL> with t2 as (
  2    with t as (select * from dual) select * from t
  3  ) select * from t2;
  with t as (select * from dual) select * from t
  *
ERROR at line 2:
ORA-32034: unsupported use of WITH clause

SQL> with t2 as (
  2    select * from (with t as (select * from dual) select * from t)
  3  ) select * from t2;
  select * from (with t as (select * from dual) select * from t)
                 *
ERROR at line 2:
ORA-32034: unsupported use of WITH clause


и это очень,очень жаль :(
спасибо!А может и к лучшему!?

Чтобы не было, как в Си - массив указателей на массив указателей,
содержащий указатели на массив указателей на элементы массива указателей...
... на массив переменных... :-)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332759
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринскийorawishпропущено...

и это очень,очень жаль :(
спасибо!А может и к лучшему!?

Чтобы не было, как в Си - массив указателей на массив указателей,
содержащий указатели на массив указателей на элементы массива указателей...
... на массив переменных... :-)
у меня интерес вполне утилитарный - (пусть: ) есть (произвольный) запрос t, который надо использовать во from другого запроса t2.
ну и если в t есть with кляуза, то в t2 её быть не может.
а я просто хочу не думать про синтаксическую конструкцию запроса - мне достаточно знать его состав столбцов и их прикладной смысл.
ограничение же весьма сковывает алгоритмы для генерации запросов из запросов.
1) корявые генерашки получаются.
2) использовать объединение или джоин двух запросов, в каждом из которых факторинг уже есть = облом

а как следствие - если работа 2) над запросами предполагается, то на факторинг, вообще, табу
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332804
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishВалерий Юринскийпропущено...
А может и к лучшему!?

Чтобы не было, как в Си - массив указателей на массив указателей,
содержащий указатели на массив указателей на элементы массива указателей...
... на массив переменных... :-)
у меня интерес вполне утилитарный - (пусть: ) есть (произвольный) запрос t, который надо использовать во from другого запроса t2.
ну и если в t есть with кляуза, то в t2 её быть не может.
а я просто хочу не думать про синтаксическую конструкцию запроса - мне достаточно знать его состав столбцов и их прикладной смысл.
ограничение же весьма сковывает алгоритмы для генерации запросов из запросов.
1) корявые генерашки получаются.
2) использовать объединение или джоин двух запросов, в каждом из которых факторинг уже есть = облом

а как следствие - если работа 2) над запросами предполагается, то на факторинг, вообще, табу
впрочем, тут я увлёкся и заврался. на одном уровне вложенности подзапросов >1 факторинг возможен
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select * from(
  select * from (
    select * from (select * from (with t as (select * from tab)  select * from t)) a
                 ,(select * from (with t as (select * from dual) select * from t)) b
  ) where rownum < 10
)
/
..
9 строк выбрано.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332817
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishу меня интерес вполне утилитарный - (пусть: ) есть (произвольный) запрос t, который надо использовать во from другого запроса t2.
ну и если в t есть with кляуза, то в t2 её быть не может.
а я просто хочу не думать про синтаксическую конструкцию запроса - мне достаточно знать его состав столбцов и их прикладной смысл.
ограничение же весьма сковывает алгоритмы для генерации запросов из запросов.
А в генераторе весь факторинг свалить в один with и дальше вертеть запросы как хочется - не вариант?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332850
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousorawishу меня интерес вполне утилитарный - (пусть: ) есть (произвольный) запрос t, который надо использовать во from другого запроса t2.
ну и если в t есть with кляуза, то в t2 её быть не может.
а я просто хочу не думать про синтаксическую конструкцию запроса - мне достаточно знать его состав столбцов и их прикладной смысл.
ограничение же весьма сковывает алгоритмы для генерации запросов из запросов.
А в генераторе весь факторинг свалить в один with и дальше вертеть запросы как хочется - не вариант?
не.., в общем случае - не вариант.
причина - возможные конфликты (то бишь - накладки) алиасов. случись такое, и разбор получается нетревиальный
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332866
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishпричина - возможные конфликты (то бишь - накладки) алиасов.
Это можно разрулить.
Как вариант - на этапе размещения запроса в репозитории генератора - к примеру, требовать именования алиасов в виде, обеспечивающем их тривиальный "выпил" из текста запроса генератором.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332903
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousorawishпричина - возможные конфликты (то бишь - накладки) алиасов.
Это можно разрулить.
Как вариант - на этапе размещения запроса в репозитории генератора - к примеру, требовать именования алиасов в виде, обеспечивающем их тривиальный "выпил" из текста запроса генератором.
в принципе - можно, только это еще потребует:
(как минимум) - репозитария,
согласованности с правилами именования объектов в базе,
нужда в серьёзном синтаксическом разборе таки останется (ибо литералы..),
ну и имена алиасов будут однозначно мерзкие
:)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332944
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishну и имена алиасов будут однозначно мерзкие
:)
Слово "репозиторий" я употребил условно - как некое место, где пасутся исходные запросы, на которые охотится генератор.
Что до мерзости - то вложенные with с повторяющимися алиасами вызвали бы у меня еще большее омерзение
:)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38332991
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousorawishну и имена алиасов будут однозначно мерзкие
:)
Слово "репозиторий" я употребил условно - как некое место, где пасутся исходные запросы, на которые охотится генератор.
Что до мерзости - то вложенные with с повторяющимися алиасами вызвали бы у меня еще большее омерзение
:)
Слово "репозиторий".. - всё так. тем не менее - текста запроса получается недостаточно, нужно к нему еще хранить историю его трансформаций.
ну повторяющиеся - это я не только (и не столько :) имел ввиду, что внутри одного селекта
а, например, ситуацию, когда надо к
Код: plsql
1.
with t as (select * from emp) select * from t


примантурить во фром
Код: plsql
1.
with t as (select * from dept) select * from t
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38333027
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishисторию его трансформаций.
Перебор?

orawishситуацию, когда надо к
Код: plsql
1.
with t as (select * from emp) select * from t


примантурить во фром
Код: plsql
1.
with t as (select * from dept) select * from t


Вот и я о том - как это будет выглядеть на паре-тройке "вложенных", в факторинге каждого из которых по паре-тройке таких же :)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38333062
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousorawishисторию его трансформаций.
Перебор?

ну, наверное, перебор :)
andrey_anonymousВот и я о том - как это будет выглядеть на паре-тройке "вложенных", в факторинге каждого из которых по паре-тройке таких же :) :)
а сухой остаток всё же такой:
если надо произвольный запрос трансформировать (предикатов ему добавить, группировку, сортировку, аналитику и т.п.),
то не
Код: plsql
1.
2.
with ляля as (исходный запрос)
select новые_дрова from ляля новые_ворота;


а (по-прежнему)
Код: plsql
1.
select новые_дрова from (исходный запрос) новые_ворота;
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38333908
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринский
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL*Plus: Release 12.1.0.1.0 Production on Fri Jul 12 14:30:18 2013

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

SQL> WITH                                                                          
FUNCTION str_plus(p_str VARCHAR2) RETURN VARCHAR2
IS
BEGIN
   RETURN p_str || '+';
END;
--
SELECT tname, str_plus(tname) FROM tab WHERE ROWNUM <= 2;   
/

TNAME           STR_PLUS(TNAME)
---------------- -------------------------
ACCESS$     ACCESS$+
ACLMV$      ACLMV$+

Выделил версию SQL*Plus 12.1.0.1.0,
чтобы подчеркнуть, что старый SQL*Plus такого выполнить не может.

Скачал свежайшую (от 11-jul-2013) версию Oracle SQL Developer 4.0 Early Adopter 1 (Version 4.0.0.12, Build MAIN-12.27)
Его пока тоже не научили выполнять такие конструкции :-(
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Error starting at line : 1 in command -
WITH                                                                          
FUNCTION str_plus(p_str VARCHAR2) RETURN VARCHAR2
IS
BEGIN
   RETURN p_str || '+'
Error at Command Line : 2 Column : 1
Error report -
SQL Error: ORA-06553: PLS-103: Encountered the symbol "end-of-file" when expecting one of the following:

   * & = - + ; < / > at in is mod remainder not rem
   <an exponent (**)> <> or != or ~= >= <= <> and or like like2
   like4 likec between || member submultiset
06553. 00000 -  "PLS-%s: %s"
*Cause:    
*Action:

Error starting at line : 6 in command -
END
Error report -
Unknown Command


Так что пока работаем только с SQL*Plus 12.1.0.1
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38334198
init.ora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поведение рекурсии, я так понимаю, не изменилось?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with x as(
	select 1 a from dual union all
	select 2 a from dual union all
	select 3 a from dual  
)
,y(d) as(
	select a from x where a=1
	
	union all
	
	select d
	from( 
		select x.a d
		from x, y where x.a=y.d+1
	)
)

select *
from y
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38334253
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
init.ora,
мож
select x.a+1 d

зи
догадываюсь что Ваш вопрос не в етом


ps
в Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 -
рекурсивный запрос с датами бузит,
о 12-ке не спрашиваю, бо кажись в 11.2.0.3.0 исправили

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38334270
init.ora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..init.ora,
мож
select x.a+1 d

зи
догадываюсь что Ваш вопрос не в етом


ps
в Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 -
рекурсивный запрос с датами бузит,
о 12-ке не спрашиваю, бо кажись в 11.2.0.3.0 исправили

.....
stax
не, все норм с запросом :)
интересует ORA-32042
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38334345
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
init.oraне, все норм с запросом :)

шот я опять торможу,
что должен вернуть если без "подзапроса"?

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38334574
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
init.oraповедение рекурсии, я так понимаю, не изменилось?
ORA-32042: recursive WITH clause must reference itself directly in one of the UNION ALL branches
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with x as(
    select 1 a from dual union all
    select 2 a from dual union all
    select 3 a from dual)
 , y(d) as(
    select a from x where a=1
    union all
    select d
    from(select x.a d from x, y where x.a=y.d+1
    )
)
select * from y;
SQL> SQL> SQL> SQL>   2    3    4    5    6    7    8    9   10   11   12      from(select x.a d from x, y where x.a=y.d+1
                              *
ERROR at line 9:
ORA-32042: recursive WITH clause must reference itself directly in one of the UNION ALL branches

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38334631
Фотография Ramin Hashimzade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ребят 2 просьбы.
1) у кого уже есть 12 попробуйте этот запрос плиз, ради интереса:
Код: plsql
1.
select * from dual join dual on 1 = 1;


2) и дайте пожалуйста ссылку для скачивание презентацию Тома

спасибо
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38335449
Фотография Ramin Hashimzade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ramin Hashimzadeребят 2 просьбы.
1) у кого уже есть 12 попробуйте этот запрос плиз, ради интереса:
Код: plsql
1.
select * from dual join dual on 1 = 1;


2) и дайте пожалуйста ссылку для скачивание презентацию Тома

спасибо
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38336334
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ramin Hashimzade1) у кого уже есть 12 попробуйте этот запрос плиз, ради интереса:
Код: plsql
1.
select * from dual join dual on 1 = 1;



Код: plsql
1.
2.
3.
select * from dual join dual on 1 = 1;

select banner from v$version where rownum = 1;



Код: plsql
1.
2.
3.
4.
5.
6.
7.
DUMMY DUMMY
----- -----
X     X     

BANNER                                                                         
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production




Код: plsql
1.
2.
3.
4.
5.
6.
7.
DUMMY DUMMY
----- -----
X     X     

BANNER                                                                         
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production     



А какой ожидался результат?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38336668
Фотография Sacramento
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
suPPLerА какой ожидался результат?1)Не подскажете сколько время?
2)Спасибо. А не займеш 2 рубля?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38336703
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринский,

а как в 12с насчёт RBO?
см. 5791890
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38336723
zhal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
suPPLerА какой ожидался результат? Возможно такой, если переписать из ANSI в Оракловый синтаксис
Код: plsql
1.
2.
3.
4.
5.
6.
SQL> select * from dual, dual WHERE 1 = 1
  2  /
 
select * from dual, dual WHERE 1 = 1
 
ORA-00918: column ambiguously defined
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38336745
KoTTT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish,

Жив там RBO.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38336747
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zhalsuPPLerА какой ожидался результат? Возможно такой, если переписать из ANSI в Оракловый синтаксис
Код: plsql
1.
2.
3.
4.
5.
6.
SQL> select * from dual, dual WHERE 1 = 1
  2  /
 
select * from dual, dual WHERE 1 = 1
 
ORA-00918: column ambiguously defined


дак это запросто:
Код: plsql
1.
2.
3.
4.
5.
select * from dual, dual WHERE 1 = 1 order by 1;

select * from (select * from dual, dual WHERE 1 = 1);

..
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337290
init.ora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите плз, появилась ли возможность раздавать гранты на все все однотипные объекты своей схемы?
что-то вроде
Код: plsql
1.
grant on all_tables to <user> --выдать гранты на все таблицы из своей схемы
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337325
хтось
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
init.oraПодскажите плз, появилась ли возможность раздавать гранты на все все однотипные объекты своей схемы?
что-то вроде
Код: plsql
1.
grant on all_tables to <user> --выдать гранты на все таблицы из своей схемы


а чё, написать скриптик на PL/SQL в две строчки, который это сделает - руки болят?
ну прям мега-нужная фича....
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337338
Фотография Vivat!San
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хтосьа чё, написать скриптик на PL/SQL в две строчки, который это сделает - руки болят?
ну прям мега-нужная фича....

Наверно имелось в виду, что эта привилегия должна работать и при добавлении новых таблиц.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337355
хтось
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vivat!SanНаверно имелось в виду, что эта привилегия должна работать и при добавлении новых таблиц.
ну а это ваще жесть...
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337371
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
init.oraПодскажите плз, появилась ли возможность раздавать гранты на все все однотипные объекты своей схемы?
что-то вроде
Код: plsql
1.
grant on all_tables to <user> --выдать гранты на все таблицы из своей схемы


Нет, такая возможность не появилась.

Зато появилась возможность давать привилегии программным единицам.

http://docs.oracle.com/cd/E16655_01/server.121/e17209/statements_9013.htm#SQLRF56650] grant_roles_to_programs ::=


http://docs.oracle.com/cd/E16655_01/server.121/e17209/statements_9013.htm#BGEFDJFI] program_unit ::=
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337425
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishВалерий Юринский,

а как в 12с насчёт RBO?
см. 5791890
Жив курилка! :-)
Код: 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.
[oracle@oradb SQL]$ sqlplus sys@pdborcl AS sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Fri Jul 19 18:39:23 2013

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter password: 

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> explain plan for
select --+ rule
   A.name
  ,C.blocks
  ,C.extents
from sys.obj$ A
    ,sys.tab$ B
    ,sys.seg$ C
where A.owner# = (select user# from sys.user$ where name = user)
  and B.obj#   = A.obj#
  and C.file#  = B.file#
  and C.block# = B.block#;

select * from table(dbms_xplan.display);
  2    3    4    5    6    7    8    9   10   11   12  
Explained.

SQL> SQL> 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2880203025

--------------------------------------------------
| Id  | Operation                      | Name    |
--------------------------------------------------
|   0 | SELECT STATEMENT               |         |
|   1 |  NESTED LOOPS                  |         |
|   2 |   NESTED LOOPS                 |         |
|   3 |    TABLE ACCESS FULL           | SEG$    |
|*  4 |    INDEX RANGE SCAN            | I_OBJ2  |
|   5 |     TABLE ACCESS BY INDEX ROWID| USER$   |

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|*  6 |      INDEX UNIQUE SCAN         | I_USER1 |
|*  7 |   TABLE ACCESS CLUSTER         | TAB$    |
|*  8 |    INDEX UNIQUE SCAN           | I_OBJ#  |
--------------------------------------------------

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

   4 - access("A"."OWNER#"= (SELECT "USER#" FROM "SYS"."USER$" "USER$"
              WHERE "NAME"=USER@!))
   6 - access("NAME"=USER@!)

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
   7 - filter("C"."BLOCK#"="B"."BLOCK#" AND "C"."FILE#"="B"."FILE#")
   8 - access("B"."OBJ#"="A"."OBJ#")

Note
-----
   - rule based optimizer used (consider using cbo)

28 rows selected.

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337477
Фотография Ramin Hashimzade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
suPPLerRamin Hashimzade1) у кого уже есть 12 попробуйте этот запрос плиз, ради интереса:
Код: plsql
1.
select * from dual join dual on 1 = 1;



Код: plsql
1.
2.
3.
select * from dual join dual on 1 = 1;

select banner from v$version where rownum = 1;



Код: plsql
1.
2.
3.
4.
5.
6.
7.
DUMMY DUMMY
----- -----
X     X     

BANNER                                                                         
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production




Код: plsql
1.
2.
3.
4.
5.
6.
7.
DUMMY DUMMY
----- -----
X     X     

BANNER                                                                         
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production     



А какой ожидался результат?

особенно ничего просто ошибку ожидал: column ambiguously defined
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337485
Ramin Hashimzade
Код: plsql
1.
select * from dual join dual on 1 = 1;


особенно ничего просто ошибку ожидал: column ambiguously defined
С какого перепуга?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337494
Фотография Ramin Hashimzade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
колумнатор-алиасерRamin Hashimzade
Код: plsql
1.
select * from dual join dual on 1 = 1;


особенно ничего просто ошибку ожидал: column ambiguously defined
С какого перепуга?
посмотри на версию 11.2.0.1 поймешь... еше влспоминание остались.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337524
Ramin Hashimzadeколумнатор-алиасерпропущено...
С какого перепуга?
посмотри на версию 11.2.0.1 поймешь... еше влспоминание остались.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> select * from dual t join dual t2 on 1 = 1;
 
DUMMY DUMMY
----- -----
X     X
 
SQL> select banner from v$version where rownum = 1;
 
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
 
SQL> 
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337586
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а че там, в 12 версии... можно писать селект из функции без этих дебильных и абсолютно не нужных кастов?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337589
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxа че там, в 12 версии...
можно писать селект из функции без этих дебильных
и абсолютно не нужных кастов?Объясните, что именно вы имеете в виду?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337599
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
select *
 from MyPackage.MyFunction()
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337602
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
andreymx,
пока только в плюсе, у Тома-нашего-Кайта есть примеры
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337603
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
и то не так :)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337605
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337622
аппендикс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx
Код: plsql
1.
2.
select *
 from MyPackage.MyFunction()

под дебильным и абсолютно ненужным подразумевается ключевое слово table?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337742
Фотография Ramin Hashimzade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
алиасы - наше фсе,

Hmmm, ОС какая?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38337774
Ramin Hashimzadeалиасы - наше фсе,

Hmmm, ОС какая?
В тесте использован стенд на солярке х86-64
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38338205
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxа че там, в 12 версии... можно писать селект из функции без этих дебильных и абсолютно не нужных кастов?

Так давно уже без "кастов":
Код: plsql
1.
select * from table( dbms_xplan.display );


Явного приведения нет.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38339156
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринский, допускаются ли вложенные аналитилуские ф-ции

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select e.*
 ,sum (
    (case when lag(sal,1,sal) over (order by empno) >= sal then 1 else 0 end)) 
  over (order by empno) gr 
from emp e order by empno
/

ERROR at line 2:
ORA-30483: window  functions are not allowed here


....
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340403
antonelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот такие запросы работают в 12c:

select * from country co where not exists ( select 1 from city where state_id in (select state_id from state where country_id=co.country_id))

Те с кореллированным подзапросом двойной и более вложенности
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340434
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antonellyА вот такие запросы работают в 12c:

select * from country co where not exists ( select 1 from city where state_id in (select state_id from state where country_id=co.country_id))

Те с кореллированным подзапросом двойной и более вложенности
Код: 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.
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
SQL> create table kountry (country_id int,n varchar2(10));

Table created.

SQL> create table sity(sity_id int,state_id int,n varchar2(10));

Table created.

SQL> create table state (state_id int,country_id int,n varchar2(10));

Table created.

SQL> select * from country co where not exists ( select 1 from city where
  2  .
SQL> ed
Wrote file afiedt.buf

  1  select * from kountry co where not exists
  2  ( select 1 from sity where state_id in
  3*  (select state_id from state where country_id=co.country_id))
SQL> /

no rows selected



.....
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340492
ten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antonelly,
Код: 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.
SQL> select * from v$version;

BANNER                                                                          
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production          
PL/SQL Release 11.2.0.2.0 - Production                                          
CORE	11.2.0.2.0	Production                                                      
TNS for Linux: Version 11.2.0.2.0 - Production                                  
NLSRTL Version 11.2.0.2.0 - Production                                          

SQL> drop table my_dual;

Таблица удалена.

SQL> create table my_dual as select * from dual;

Таблица создана.

SQL> select *
  2    from my_dual co
  3   where exists
  4  	(select 1
  5  	   from my_dual d1
  6  	  where d1.dummy in (select d2.dummy
  7  			       from my_dual d2
  8  			      where d2.dummy = co.dummy));

D                                                                               
-                                                                               
X                                                                               

SQL> spool off
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340496
ten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,
Станислав, скорость интернета возросла? :)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340758
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tenstax..,
Станислав, скорость интернета возросла? :)
нет, просто ето больной вопрос для меня

как грил Елік, on line view не может быть коррелированным

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
  1  select d.dummy from dual d where exists
  2     (select decode(d2.dummy,d4.dummy,'X') x
  3      from dual d2,(select * from dual d3 where d3.dummy= /*'X'*/ d.dummy )d4
  4*    )
SQL> /
    from dual d2,(select * from dual d3 where d3.dummy= /*'X'*/ d.dummy )d4
                                                                *
ERROR at line 3:
ORA-00904: "D"."DUMMY": invalid identifier



......
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340773
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..on line view не может быть коррелированным

Точности ради: in line.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340787
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
suPPLerstax..on line view не может быть коррелированным

Точности ради: in line.
конешо in line
сори за мой бед инглиш (да и русиш), но я стараюсь

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340817
Фотография Sacramento
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
autonellyА вот такие запросы работают в 12c:
Код: plsql
1.
select 1 from dual d1 where 1 in (select 1 from dual d2 join dual d3 on d1.dummy = d3.dummy)

Подпишешсо за старое доброе?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340831
wurdu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..tenstax..,
Станислав, скорость интернета возросла? :)
нет, просто ето больной вопрос для меня

как грил Елік, on line view не может быть коррелированным

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
  1  select d.dummy from dual d where exists
  2     (select decode(d2.dummy,d4.dummy,'X') x
  3      from dual d2,(select * from dual d3 where d3.dummy= /*'X'*/ d.dummy )d4
  4*    )
SQL> /
    from dual d2,(select * from dual d3 where d3.dummy= /*'X'*/ d.dummy )d4
                                                                *
ERROR at line 3:
ORA-00904: "D"."DUMMY": invalid identifier



......
staxА как же Using Lateral Inline Views: Example
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340845
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SacramentoautonellyА вот такие запросы работают в 12c:
Код: plsql
1.
select 1 from dual d1 where 1 in (select 1 from dual d2 join dual d3 on d1.dummy = d3.dummy)

Подпишешсо за старое доброе?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Присоединен к:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing opt
ions

SQL> select 1 from dual d1
  2   where 1 in (select 1 from dual d2 join dual d3 on d1.dummy = d3.dummy);

         1
----------
         1
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340861
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wurdustax..пропущено...

нет, просто ето больной вопрос для меня

как грил Елік, on line view не может быть коррелированным

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
  1  select d.dummy from dual d where exists
  2     (select decode(d2.dummy,d4.dummy,'X') x
  3      from dual d2,(select * from dual d3 where d3.dummy= /*'X'*/ d.dummy )d4
  4*    )
SQL> /
    from dual d2,(select * from dual d3 where d3.dummy= /*'X'*/ d.dummy )d4
                                                                *
ERROR at line 3:
ORA-00904: "D"."DUMMY": invalid identifier



......
staxА как же Using Lateral Inline Views: Example

імхо, Lateral немножко не то, вот если б
from dual d2,(select * from dual d3 where d3.dummy= d2 .dummy )d4


.....
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340869
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..как грил Елік, inline view не может быть коррелированным Все меняется... :-)

query_table_expression ::=

query_table_expression -> LATERAL LATERAL Specify LATERAL to designate subquery as a lateral inline view. Within a
lateral inline view, you can specify tables that appear to the left of the lateral inline
view in the FROM clause of a query. You can specify this left correlation anywhere
within subquery (such as the SELECT, FROM, and WHERE clauses) and at any nesting level.

Restrictions on LATERAL: Lateral inline views are subject to the following
restrictions:
If you specify LATERAL, then you cannot specify the pivot_clause, the unpivot_
clause, or a pattern in the table_reference clause.

If a lateral inline view contains the query_partition_clause, and it is the right
side of a join clause, then it cannot contain a left correlation to the left table in the
join clause. However, it can contain a left correlation to a table to its left in the FROM
clause that is not the left table.

A lateral inline view cannot contain a left correlation to the first table in a right
outer join or full outer join.

Using Lateral Inline Views: Example The following example shows a join with two
operands. The second operand is an inline view that specifies the first operand, table e,
in the WHERE clause. This results in an error.
Код: plsql
1.
2.
3.
SELECT * FROM employees e, (SELECT * FROM departments d
WHERE e.department_id = d.department_id);
ORA-00904: "E"."DEPARTMENT_ID": invalid identifier


The following example shows a join with two operands. The second operand is a
lateral inline view that specifies the first operand, table e, in the WHERE clause and
succeeds without an error.
Код: plsql
1.
2.
SELECT * FROM employees e, LATERAL (SELECT * FROM departments d
WHERE e.department_id = d.department_id);


Выполнение примеров в 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.
SQL*Plus: Release 11.2.0.3.0 Production on Tue Jul 23 16:29:51 2013
Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> SELECT *
  2  FROM employees e
  3     , (SELECT * FROM departments d
  4        WHERE e.department_id = d.department_id);
      WHERE e.department_id = d.department_id)
            *
ERROR at line 4:
ORA-00904: "E"."DEPARTMENT_ID": invalid identifier

SQL> SELECT COUNT(*), max(department_name) AS max_dname
  2  FROM employees e
  3     , LATERAL (SELECT * FROM departments d
  4                WHERE e.department_id = d.department_id);

  COUNT(*) MAX_DNAME
---------- ------------------------------
       106 Shipping


...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340917
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринскийstax..как грил Елік, inline view не может быть коррелированным Все меняется... :-)

query_table_expression ::=

query_table_expression -> LATERAL LATERAL Specify LATERAL to designate subquery as a lateral inline view. Within a
lateral inline view, you can specify tables that appear to the left of the lateral inline
view in the FROM clause of a query. You can specify this left correlation anywhere
within subquery (such as the SELECT, FROM, and WHERE clauses) and at any nesting level.

Restrictions on LATERAL: Lateral inline views are subject to the following
restrictions:
If you specify LATERAL, then you cannot specify the pivot_clause, the unpivot_
clause, or a pattern in the table_reference clause.

If a lateral inline view contains the query_partition_clause, and it is the right
side of a join clause, then it cannot contain a left correlation to the left table in the
join clause. However, it can contain a left correlation to a table to its left in the FROM
clause that is not the left table.

A lateral inline view cannot contain a left correlation to the first table in a right
outer join or full outer join.

Using Lateral Inline Views: Example The following example shows a join with two
operands. The second operand is an inline view that specifies the first operand, table e,
in the WHERE clause. This results in an error.
Код: plsql
1.
2.
3.
SELECT * FROM employees e, (SELECT * FROM departments d
WHERE e.department_id = d.department_id);
ORA-00904: "E"."DEPARTMENT_ID": invalid identifier


The following example shows a join with two operands. The second operand is a
lateral inline view that specifies the first operand, table e, in the WHERE clause and
succeeds without an error.
Код: plsql
1.
2.
SELECT * FROM employees e, LATERAL (SELECT * FROM departments d
WHERE e.department_id = d.department_id);


Выполнение примеров в 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.
SQL*Plus: Release 11.2.0.3.0 Production on Tue Jul 23 16:29:51 2013
Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> SELECT *
  2  FROM employees e
  3     , (SELECT * FROM departments d
  4        WHERE e.department_id = d.department_id);
      WHERE e.department_id = d.department_id)
            *
ERROR at line 4:
ORA-00904: "E"."DEPARTMENT_ID": invalid identifier

SQL> SELECT COUNT(*), max(department_name) AS max_dname
  2  FROM employees e
  3     , LATERAL (SELECT * FROM departments d
  4                WHERE e.department_id = d.department_id);

  COUNT(*) MAX_DNAME
---------- ------------------------------
       106 Shipping



туплю я, імхо ето немножко не то, как мой тестик будет выглядить с LATERAL (мне понятно если поле с D2)?
Код: plsql
1.
2.
3.
4.
5.
select d.dummy from dual d where exists
   (select decode(d2.dummy,d4.dummy,'X') x
    from dual d2,LATERAL(select * from dual d3 where d3.dummy= /*'X'*/ d.dummy ))d4
   )
/



.....
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340921
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..Валерий Юринский, допускаются ли вложенные аналитилуские ф-ции
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select e.*
 ,sum (
    (case when lag(sal,1,sal) over (order by empno) >= sal then 1 else 0 end)) 
  over (order by empno) gr 
from emp e order by empno
/

ERROR at line 2:
ORA-30483: window  functions are not allowed here


Нек, не докускаются :-)
ORA-30483: window functions are not allowed here
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

SQL> select e.*
  2   ,sum (
  3      (case when lag(sal,1,sal) over (order by empno) >= sal then 1 else 0 en
d))
  4    over (order by empno) gr
  5  from emp e order by empno;
    (case when lag(sal,1,sal) over (order by empno) >= sal then 1 else 0 end))
               *
ERROR at line 3:
ORA-30483: window  functions are not allowed here

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340926
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1259Валерий Юринский,
как насчет вложенных аналит. ф-ций? 14599470

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340934
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..туплю я, імхо ето немножко не то, как мой тестик будет выглядить с LATERAL (мне понятно если поле с D2)?
Код: plsql
1.
2.
3.
4.
5.
select d.dummy from dual d where exists
   (select decode(d2.dummy,d4.dummy,'X') x
    from dual d2,LATERAL(select * from dual d3 where d3.dummy= /*'X'*/ d.dummy ))d4
   )
/


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

SQL> select d.dummy
  2  from dual d
  3  where exists
  4     (select decode(d2.dummy, d4.dummy, 'X') x
  5      from dual d2
  6         , LATERAL (select * from dual d3
  7                    where d3.dummy= /*'X'*/ d.dummy ) d4)
  8  ;

D
-
X

Лишнюю скобку убрал правильно? (выделено малиновым)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340937
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..1259Валерий Юринский,
как насчет вложенных аналит. ф-ций? 14599470
Нет, не допускаются. (см. выше)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38340988
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринскийstax..туплю я, імхо ето немножко не то, как мой тестик будет выглядить с LATERAL (мне понятно если поле с D2)?
Код: plsql
1.
2.
3.
4.
5.
select d.dummy from dual d where exists
   (select decode(d2.dummy,d4.dummy,'X') x
    from dual d2,LATERAL(select * from dual d3 where d3.dummy= /*'X'*/ d.dummy ))d4
   )
/


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

SQL> select d.dummy
  2  from dual d
  3  where exists
  4     (select decode(d2.dummy, d4.dummy, 'X') x
  5      from dual d2
  6         , LATERAL (select * from dual d3
  7                    where d3.dummy= /*'X'*/ d.dummy ) d4)
  8  ;

D
-
X

Лишнюю скобку убрал правильно? (выделено малиновым)
Да, дописывая LATERAL автоматом скобочку добавил
спасибо за тесты, жалко що нельзя вложенные аналит ф-ции

зы
без LATERAL запрос слетает?

......
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38341164
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..зы
без LATERAL запрос слетает?
Нет, не слетает.
Работает и без LATERAL:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

SQL> select d.dummy from dual d where exists
  2     (select decode(d2.dummy,d4.dummy,'X') x
  3      from dual d2
  4         , (select * from dual d3 where d3.dummy= /*'X'*/ d.dummy )d4
  5     )
  6  ;

D
-
X
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38341230
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринскийstax..зы
без LATERAL запрос слетает?
Нет, не слетает.
Работает и без LATERAL:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

SQL> select d.dummy from dual d where exists
  2     (select decode(d2.dummy,d4.dummy,'X') x
  3      from dual d2
  4         , (select * from dual d3 where d3.dummy= /*'X'*/ d.dummy )d4
  5     )
  6  ;

D
-
X



я подозревал что не слетит, мне кажется что для exists LATERAL не очень походит

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38341255
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..я подозревал что не слетит, мне кажется что для exists LATERAL не очень походит


Не путай correlated subquery и lateral in-line view:


Код: 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.
SQL> select d.dummy from dual d where exists
  2     (select decode(d2.dummy,d4.dummy,'X') x
  3      from dual d2
  4         , (select * from dual d3 where d3.dummy= /*'X'*/ d.dummy )d4 -- works, since d3 is correlated to d
  5     )
  6  /

D
-
X

SQL> select d.dummy from dual d where exists
  2     (select decode(d2.dummy,d4.dummy,'X') x
  3      from dual d2
  4         , (select * from dual d3 where d3.dummy= /*'X'*/ d2.dummy )d4 -- fails, since d3 is neither correlated nor lateral to d2
  5     )
  6  /
       , (select * from dual d3 where d3.dummy= /*'X'*/ d2.dummy )d4 -- fails, since d3 is neither correlated nor lateral to d2                                                        *
ERROR at line 4:
ORA-00904: "D2"."DUMMY": invalid identifier


SQL> select d.dummy from dual d where exists
  2     (select decode(d2.dummy,d4.dummy,'X') x
  3      from dual d2
  4         , LATERAL(select * from dual d3 where d3.dummy= /*'X'*/ d2.dummy )d4 -- works, since d3 is lateral to d2
  5     )
  6  /

D
-
X

SQL>



SY.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38341275
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

А как вы перевели бы LATERAL на русский?

Спасибо!
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38341289
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий ЮринскийSY,

А как вы перевели бы LATERAL на русский?


Трудно сказать, может "боковой"?

SY.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38341300
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYТрудно сказать, может "боковой"?


То есть добавить слово боковой к русскому переводу термина in-line view.

SY.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38341305
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- по б о ку,
- по барабану,
- по ...
И обратное влияние сленга на русский язык:
- латерал тебе,
- латерня собачья,
- забить латерал на работу,
- ...
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38341312
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYТо есть добавить слово боковой к русскому переводу термина in-line view.


Хотя точнее было-бы "правобокий" , посколько LATERAL in-line view используется для левосторонней корреляции (left-correlation) и посему не подерживает forward-referencing:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> select d.dummy from dual d where exists
  2     (select decode(d2.dummy,d4.dummy,'X') x
  3      from LATERAL(select * from dual d3 where d3.dummy= /*'X'*/ d2.dummy ) d4, dual d2
  4     )
  5  /
    from LATERAL(select * from dual d3 where d3.dummy= /*'X'*/ d2.dummy ) d4, dual d2
                                                               *
ERROR at line 3:
ORA-00904: "D2"."DUMMY": invalid identifier


SQL>



SY.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38341519
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий ЮринскийSY,

А как вы перевели бы LATERAL на русский?

Спасибо!
ИМХО, наилучшим образом существо дела передает "перевод" в виде параметризованное представление .
Но собственно lateral при этом выпадает.

Вариант параметризованное ветвящее представление (ради охранения следов от lateral) выглядит многословным (и малек деревенским).

Просто боковое/ветвящее/плечевое , ИМХО, туманит вопрос об использовании французского языка на Рязанских просторах.

А варианты вроде коррелированного представления слишком мало отличимы на слух от коррелированных подзапросов.
Крыша неопытного читателя необязательно сумеет найти разницу.

Медики, между тем, не стесняются переводить lateral просто как латеральный - профессиональный термин и все. Кто в теме, тот знает как им пользоваться, и дополнительных описаний в специальных, не учебных, текстах не требуется.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38341560
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYХотя точнее было-бы "правобокий"

IMHO скорее ответвление. Ну или как прилагательное - побочный (вторичный).
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38341570
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYSYТо есть добавить слово боковой к русскому переводу термина in-line view.
Хотя точнее было-бы "правобокий" , посколько LATERAL in-line view используется для левосторонней корреляции (left-correlation) и посему не подерживает forward-referencing:Всё же точнее (в)лево-коррелированный: (в)лево-коррелированное вложенное представление. По аналогии с http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_10002.htm#i2104990] left correlation of table_collection_expression
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38341775
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicSYпропущено...
Хотя точнее было-бы "правобокий" , посколько LATERAL in-line view используется для левосторонней корреляции (left-correlation) и посему не подерживает forward-referencing:Всё же точнее (в)лево-коррелированный: (в)лево-коррелированное вложенное представление. По аналогии с http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_10002.htm#i2104990] left correlation of table_collection_expression Очень хорошее терминологическое предложение!

Спасибо!
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38341863
init.ora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cross\outer apply появились (?)
http://docs.oracle.com/cd/E16655_01/server.121/e17209/statements_10002.htm#BABCHEAJ
Зачем тогда Lateral?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38342178
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
init.oracross\outer apply появились (?)
http://docs.oracle.com/cd/E16655_01/server.121/e17209/statements_10002.htm#BABCHEAJ
Зачем тогда Lateral?
О! OUTER APPLY хочу!
А то раздражает обработка вот такого:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> SELECT n,yv
  2    FROM (SELECT XMLTYPE('<q><x n="1"><y>1-1</y></x><x n="2"/></q>') x from dual) q1,
  3         XMLTABLE('/q/x' PASSING q1.x
  4          COLUMNS n PATH '@n',
  5                  x XMLTYPE PATH '/*') q2,
  6         XMLTABLE('/x/y' PASSING q2.x
  7          COLUMNS yv PATH '/*') q3
  8  /
 
N          YV
---------- ----------
1          1-1
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38342203
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYstax..я подозревал что не слетит, мне кажется что для exists LATERAL не очень походит


Не путай correlated subquery и lateral in-line view:

SY.
да я вроде не очень то путаю

14605325
Stax..імхо, Lateral немножко не то, вот если б
from dual d2,(select * from dual d3 where d3.dummy= d2.dummy )d4


новая кляуза, осваиваюсь


SY, какой-то общедоступный аля 12.apex.oracle.com на 12 версии планируется?

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38342215
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
RA\/EN,

и зачем тут outer apply? да и проще так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT n,yv
FROM   XMLTABLE('for $x in /q/x, $yv in $x/y
                   return <ROW>{$x/@n}{$yv}</ROW>' 
                PASSING XMLTYPE('<q><x n="1"><y>1-1</y></x><x n="2"/></q>')
                 COLUMNS n  PATH '@n'
                        ,yv PATH 'y'
               ) q2

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38342329
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
init.oracross\outer apply появились (?)
http://docs.oracle.com/cd/E16655_01/server.121/e17209/statements_10002.htm#BABCHEAJ
Зачем тогда Lateral?
мож apply для ansi синтаксиса, а Lateral для ораклячого

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38342355
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicВсё же точнее (в)лево-коррелированный: (в)лево-коррелированное вложенное представление. По аналогии с http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_10002.htm#i2104990] left correlation of table_collection_expression

Не хочу "split hairs", но в документации есть два термина left correlation описывающий тип связи между обьектами тогда как lateral in-line view есть сам обьект. Если в будущих версиях oracle добавит right-correlation к lateral in-line view то и лево-коррелированное вложенное представление и мой "правобокий" придется менять. Так-что я бы не ипользовал лево/право в имени самого обьекта.

SY.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38342793
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как хорошо начиналось..
и вот (мля) - началось )
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select a.* from (with
  function f_calc (str varchar2) return varchar2 is
     res simple_integer :=0;
  begin
     for i in 1..length (str) loop
       res := res + substr(str,i,1);
     end loop;
     return res;
  end;
select f_calc(regexp_replace('0535617772','\d(\d)?','\1')) as r from dual
) A;
ORA-32034: не поддерживается использование фразы WITH


спрашивается - нафик нужен тот запрос с теми функциями, если его нельзя во фром засунуть?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38342799
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish,

эдак Вы ещё и поддержку области видимости этой несчастной функции захотите, и перегрузку, и вообще полный PL/SQL в запросе! Обойдётесь синтаксическим сахаром.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38342801
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
suPPLerorawish,

эдак Вы ещё и поддержку области видимости этой несчастной функции захотите, и перегрузку, и вообще полный PL/SQL в запросе! Обойдётесь синтаксическим сахаром.
вот я и говорю - это не сах е р, а чистый нахер
:)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38342839
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishвот я и говорю - это не сах е р, а чистый нахер
:)

Сахар пихают в рот, а чистый нахер получается кагда сахар пихают не туда :

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with
  function f_calc (str varchar2) return varchar2 is
     res simple_integer :=0;
  begin
     for i in 1..length (str) loop
       res := res + substr(str,i,1);
     end loop;
     return res;
  end;
select a.* from (
select f_calc(regexp_replace('0535617772','\d(\d)?','\1')) as r from dual
) A
/

R
------
20

SQL>



SY.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38342840
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
suPPLerorawish,

эдак Вы ещё и поддержку области видимости этой несчастной функции захотите, и перегрузку, и вообще полный PL/SQL в запросе! Обойдётесь синтаксическим сахаром.
а че, перезагрузку можно проверіть (всегото два with)


ps
мне пока неначем баловатся
....
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38342849
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYorawishвот я и говорю - это не сах е р, а чистый нахер
:)

Сахар пихают в рот, а чистый нахер получается кагда сахар пихают не туда :

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with
  function f_calc (str varchar2) return varchar2 is
     res simple_integer :=0;
  begin
     for i in 1..length (str) loop
       res := res + substr(str,i,1);
     end loop;
     return res;
  end;
select a.* from (
select f_calc(regexp_replace('0535617772','\d(\d)?','\1')) as r from dual
) A
/

R
------
20

SQL>



SY.
дк, по теме выше есть подробности, почему такое решение меня нисколько не устраивает.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38342864
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishдк, по теме выше есть подробности, почему такое решение меня нисколько не устраивает.

Лень просматривать весь топик, ткни пальцем если не влом.

SY.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343051
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OUTER JOINS
http://docs.oracle.com/cd/E16655_01/server.121/e17209/queries006.htm#i2054062 In previous releases of Oracle Database, in a query that performed outer joins of more than two pairs of tables,
a single table could be the null-generated table for only one other table.
Beginning with Oracle Database 12c, a single table can be the null-generated table for multiple tables.

For example, the following statement is allowed in Oracle Database 12c:
Код: plsql
1.
2.
SELECT * FROM A, B, D
  WHERE A.c1 = B.c2(+) and D.c3 = B.c4(+);


In this example, B, the null-generated table, is outer-joined to two tables, A and D. Refer to SELECT for the syntax for an outer join.

In previous releases of Oracle Database...
ORA-01417: a table may be outer joined to at most one other 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.
26.
27.
28.
29.
30.
SQL> select banner from v$version;

BANNER
----------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE    11.2.0.3.0      Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production

SQL> SELECT E.employee_id, E.email
  2       , E.department_id, D.department_name
  3       -- Руководитель и сотрудника, и подразделения, к которому приписан сотрудник
  4       -- NULL, если руководитель сотрудника не является руководителем подразделения
  5       --       или руководитель подразделения не является руководителем сотрудника
  6       --       или руководитель сотрудника неизвестен (NULL)
  7       --       или руководитель подразделения неизвестен (NULL)
  8       , M.email as mgr_email
  9  FROM employees E   -- Сотрудники
 10     , departments D -- Подразделения компании
 11     , employees M   -- Руководители сотрудников и/или подразделений
 12  WHERE E.department_id IN (10, 20, 90)
 13    AND E.department_id = D.department_id
 14    AND E.manager_id = M.employee_id (+) -- Руководитель сотрудника
 15    AND D.manager_id = M.employee_id (+) -- Руководитель подразделения
 16  ORDER BY E.department_id NULLS LAST, E.employee_id;
  AND E.manager_id = M.employee_id (+) -- Руководитель сотрудника
                   *
ERROR at line 14:
ORA-01417: a table may be outer joined to at most one other table


Beginning with Oracle Database 12c...
Код: 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.
SQL> SELECT banner FROM v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
PL/SQL Release 12.1.0.1.0 - Production
CORE	12.1.0.1.0	Production
TNS for Linux: Version 12.1.0.1.0 - Production
NLSRTL Version 12.1.0.1.0 - Production

SQL> SELECT E.employee_id, E.email
  2  	  , E.department_id, D.department_name
  3  	  -- Руководитель и сотрудника, и подразделения, к которому приписан сотрудник
  4  	  -- NULL, если руководитель сотрудника не является руководителем подразделения
  5  	  --	   или руководитель подразделения не является руководителем сотрудника
  6  	  --	   или руководитель сотрудника неизвестен (NULL)
  7  	  --	   или руководитель подразделения неизвестен (NULL)
  8  	  , M.email as mgr_email
  9  FROM employees E	-- Сотрудники
 10  	, departments D -- Подразделения компании
 11  	, employees M	-- Руководители сотрудников и/или подразделений
 12  WHERE E.department_id IN (10, 20, 90)
 13    AND E.department_id = D.department_id
 14    AND E.manager_id = M.employee_id (+) -- Руководитель сотрудника
 15    AND D.manager_id = M.employee_id (+) -- Руководитель подразделения
 16  ORDER BY E.department_id NULLS LAST, E.employee_id;

EMPLOYEE_ID EMAIL           DEPARTMENT_ID DEPARTMENT_NAME                MGR_EMAIL
----------- --------------- ------------- ------------------------------ ---------------
        200 JWHALEN                    10 Administration
        201 MHARTSTE                   20 Marketing
        202 PFAY                       20 Marketing                      MHARTSTE
        100 SKING                      90 Executive
        101 NKOCHHAR                   90 Executive                      SKING
        102 LDEHAAN                    90 Executive                      SKING

6 rows selected.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343227
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderRA\/EN,

и зачем тут outer apply? да и проще так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT n,yv
FROM   XMLTABLE('for $x in /q/x, $yv in $x/y
                   return <ROW>{$x/@n}{$yv}</ROW>' 
                PASSING XMLTYPE('<q><x n="1"><y>1-1</y></x><x n="2"/></q>')
                 COLUMNS n  PATH '@n'
                        ,yv PATH 'y'
               ) q2


А вторая строка: n=2, yv=NULL где? ;)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343230
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий ЮринскийOUTER JOINS
http://docs.oracle.com/cd/E16655_01/server.121/e17209/queries006.htm#i2054062 In previous releases of Oracle Database, in a query that performed outer joins of more than two pairs of tables,
a single table could be the null-generated table for only one other table.
Beginning with Oracle Database 12c, a single table can be the null-generated table for multiple tables.

For example, the following statement is allowed in Oracle Database 12c:
Код: plsql
1.
2.
SELECT * FROM A, B, D
  WHERE A.c1 = B.c2(+) and D.c3 = B.c4(+);


In this example, B, the null-generated table, is outer-joined to two tables, A and D. Refer to SELECT for the syntax for an outer join.

In previous releases of Oracle Database...
ORA-01417: a table may be outer joined to at most one other 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.
26.
27.
28.
29.
30.
SQL> select banner from v$version;

BANNER
----------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE    11.2.0.3.0      Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production

SQL> SELECT E.employee_id, E.email
  2       , E.department_id, D.department_name
  3       -- Руководитель и сотрудника, и подразделения, к которому приписан сотрудник
  4       -- NULL, если руководитель сотрудника не является руководителем подразделения
  5       --       или руководитель подразделения не является руководителем сотрудника
  6       --       или руководитель сотрудника неизвестен (NULL)
  7       --       или руководитель подразделения неизвестен (NULL)
  8       , M.email as mgr_email
  9  FROM employees E   -- Сотрудники
 10     , departments D -- Подразделения компании
 11     , employees M   -- Руководители сотрудников и/или подразделений
 12  WHERE E.department_id IN (10, 20, 90)
 13    AND E.department_id = D.department_id
 14    AND E.manager_id = M.employee_id (+) -- Руководитель сотрудника
 15    AND D.manager_id = M.employee_id (+) -- Руководитель подразделения
 16  ORDER BY E.department_id NULLS LAST, E.employee_id;
  AND E.manager_id = M.employee_id (+) -- Руководитель сотрудника
                   *
ERROR at line 14:
ORA-01417: a table may be outer joined to at most one other table


Beginning with Oracle Database 12c...
Код: 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.
SQL> SELECT banner FROM v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
PL/SQL Release 12.1.0.1.0 - Production
CORE	12.1.0.1.0	Production
TNS for Linux: Version 12.1.0.1.0 - Production
NLSRTL Version 12.1.0.1.0 - Production

SQL> SELECT E.employee_id, E.email
  2  	  , E.department_id, D.department_name
  3  	  -- Руководитель и сотрудника, и подразделения, к которому приписан сотрудник
  4  	  -- NULL, если руководитель сотрудника не является руководителем подразделения
  5  	  --	   или руководитель подразделения не является руководителем сотрудника
  6  	  --	   или руководитель сотрудника неизвестен (NULL)
  7  	  --	   или руководитель подразделения неизвестен (NULL)
  8  	  , M.email as mgr_email
  9  FROM employees E	-- Сотрудники
 10  	, departments D -- Подразделения компании
 11  	, employees M	-- Руководители сотрудников и/или подразделений
 12  WHERE E.department_id IN (10, 20, 90)
 13    AND E.department_id = D.department_id
 14    AND E.manager_id = M.employee_id (+) -- Руководитель сотрудника
 15    AND D.manager_id = M.employee_id (+) -- Руководитель подразделения
 16  ORDER BY E.department_id NULLS LAST, E.employee_id;

EMPLOYEE_ID EMAIL           DEPARTMENT_ID DEPARTMENT_NAME                MGR_EMAIL
----------- --------------- ------------- ------------------------------ ---------------
        200 JWHALEN                    10 Administration
        201 MHARTSTE                   20 Marketing
        202 PFAY                       20 Marketing                      MHARTSTE
        100 SKING                      90 Executive
        101 NKOCHHAR                   90 Executive                      SKING
        102 LDEHAAN                    90 Executive                      SKING

6 rows selected.


Заверните парочку 12c, беру!!!
А то пятиэтажной вложенности запросы из-за этого ограничения жутко бесили.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343248
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
RA\/ENА вторая строка: n=2, yv=NULL где? ;)
действительно, где?
RA\/ENinit.oracross\outer apply появились (?)
http://docs.oracle.com/cd/E16655_01/server.121/e17209/statements_10002.htm#BABCHEAJ
Зачем тогда Lateral?
О! OUTER APPLY хочу!
А то раздражает обработка вот такого:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> SELECT n,yv
  2    FROM (SELECT XMLTYPE('<q><x n="1"><y>1-1</y></x><x n="2"/></q>') x from dual) q1,
  3         XMLTABLE('/q/x' PASSING q1.x
  4          COLUMNS n PATH '@n',
  5                  x XMLTYPE PATH '/*') q2,
  6         XMLTABLE('/x/y' PASSING q2.x
  7          COLUMNS yv PATH '/*') q3
  8  /
 
N          YV
---------- ----------
1          1-1


плюсик поставь, чтобы вторая строка появилась...
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT n,yv
  FROM (SELECT XMLTYPE('<q><x n="1"><y>1-1</y></x><x n="2"/></q>') x from dual) q1,
       XMLTABLE('/q/x' PASSING q1.x
        COLUMNS n PATH '@n',
                x XMLTYPE PATH '/*') q2,
       XMLTABLE('/x/y' PASSING q2.x
        COLUMNS yv PATH '/*')(+) q3
/

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343518
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYorawishдк, по теме выше есть подробности, почему такое решение меня нисколько не устраивает.

Лень просматривать весь топик, ткни пальцем если не влом.

SY.
4 страница (примерно) от 14573086 до 14573959
правило, если
Код: plsql
1.
ляля

- синтаксически корректный запрос, то и
Код: plsql
1.
 select * from ( ляля )

- тоже корректный запрос.
продержалось со времен oracle 8.0
да и для семерки - чтобы сие работало, достаточно было у ляля ампутировать ордер бай кляузу.
а то, что приключилось в 12с - гораздо более гемороидальный (сложный = мало надежный) разбор требует, на тему - где рот для того сахара.
а последствия могут быть веселые - ГУИ всяки-разные начнут болеть, потеть и не факт, что все выживут
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343582
antonelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще вопрос с счастливым обладателям: Не стало ли возможным делать запрос из REF CURSOR?
Те будет ли работать такая ф-я:

Код: plaintext
1.
2.
3.
4.
5.
6.
function get_name_from_cursor(ip_cursor SYS_REFCURSOR) RETURN SYS_REFCURSOR as
 l_res SYS_REFCURSOR;
begin
 open l_res for 
 select first_name, last_name from TABLE(ip_cursor);
 return l_res;
end;
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343605
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishправило, если ляля - синтаксически корректный запрос, то и
Код: plsql
1.
 select * from ( ляля )

- тоже корректный запрос.
продержалось со времен oracle 8.0
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> select d1.dummy, d2.dummy from dual d1, dual d2;

D D
- -
X X

SQL> select * from (select d1.dummy, d2.dummy from dual d1, dual d2);
select * from (select d1.dummy, d2.dummy from dual d1, dual d2)
       *
ERROR at line 1:
ORA-00918: column ambiguously defined
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343612
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicorawishправило, если ляля - синтаксически корректный запрос, то и
Код: plsql
1.
 select * from ( ляля )

- тоже корректный запрос.
продержалось со времен oracle 8.0
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> select d1.dummy, d2.dummy from dual d1, dual d2;

D D
- -
X X

SQL> select * from (select d1.dummy, d2.dummy from dual d1, dual d2);
select * from (select d1.dummy, d2.dummy from dual d1, dual d2)
       *
ERROR at line 1:
ORA-00918: column ambiguously defined


да, да, конечно. про ORA-00918 я напрасно не сказал (тупо забыл)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343624
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antonellyНе стало ли возможным делать запрос из REF CURSOR?fetch into
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343628
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

+
но с
Код: plsql
1.
ORA-00918: column ambiguously defined


всё очевидно, в том смысле, что оговорка (не должно быть неопределенности ..) - имхо, оговорка вменяемая
(и разумеется, на практике - таки стреляет она нередко ;)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343651
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender
плюсик поставь, чтобы вторая строка появилась...
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT n,yv
  FROM (SELECT XMLTYPE('<q><x n="1"><y>1-1</y></x><x n="2"/></q>') x from dual) q1,
       XMLTABLE('/q/x' PASSING q1.x
        COLUMNS n PATH '@n',
                x XMLTYPE PATH '/*') q2,
       XMLTABLE('/x/y' PASSING q2.x
        COLUMNS yv PATH '/*')(+) q3
/


Ы. Старею...
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343656
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishно с
Код: plsql
1.
ORA-00918: column ambiguously defined


всё очевидно, в том смысле, что оговорка (не должно быть неопределенности ..) - имхо, оговорка вменяемая
Еще, помнится, время назад были сложности с order by...
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343667
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousorawishно с
Код: plsql
1.
ORA-00918: column ambiguously defined


всё очевидно, в том смысле, что оговорка (не должно быть неопределенности ..) - имхо, оговорка вменяемая
Еще, помнится, время назад были сложности с order by...
ага (ну, про них то я упомянуть не забыл - 14615649 :)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343867
antonelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-antonellyНе стало ли возможным делать запрос из REF CURSOR?fetch into
FETCH INTO неудобен тем, что нужно знать все поля, содержащиеся в курсоре. И явно их перечислять, и поддерживать этот список в актуальном состоянии. Ну нельзя-значит нельзя, будем ждать Oracle 13
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343912
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antonelly-2-пропущено...
fetch into
FETCH INTO неудобен тем, что нужно знать все поля, содержащиеся в курсоре. И явно их перечислять, и поддерживать этот список в актуальном состоянии. Ну нельзя-значит нельзя, будем ждать Oracle 13
имхо, не дождётесь.
не для этого рефкусор предназначен. собственно, и фетчить его на стороне сервера - уже изврат изрядный, ну да ладно.
была такая тётя - пенелоппа - двадцать лет по ночам распускала то, что за день соткала.
вот эта сказочка про вас. хренли клеить, что уже порезали, чтобы снова потом клеить?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343915
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antonelly-2-пропущено...
fetch into
FETCH INTO неудобен тем, что нужно знать все поля, содержащиеся в курсоре. И явно их перечислять, и поддерживать этот список в актуальном состоянии. Ну нельзя-значит нельзя, будем ждать Oracle 13Давай разберем претензии на твоем же примере:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
function get_name_from_cursor(ip_cursor SYS_REFCURSOR) RETURN SYS_REFCURSOR as
 l_res SYS_REFCURSOR;
begin
 open l_res for 
 select first_name, last_name from TABLE(ip_cursor);
 return l_res;
end;
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38343952
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antonellyнужно знать все поля, содержащиеся в курсоре. И явно их перечислять, и поддерживать этот список в актуальном состоянии.
http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/dynamic.htm
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344027
antonelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-antonellyпропущено...

FETCH INTO неудобен тем, что нужно знать все поля, содержащиеся в курсоре. И явно их перечислять, и поддерживать этот список в актуальном состоянии. Ну нельзя-значит нельзя, будем ждать Oracle 13Давай разберем претензии на твоем же примере:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
function get_name_from_cursor(ip_cursor SYS_REFCURSOR) RETURN SYS_REFCURSOR as
 l_res SYS_REFCURSOR;
begin
 open l_res for 
 select first_name, last_name from TABLE(ip_cursor);
 return l_res;
end;


Я имел в виду все поля в курсоре вообще, а не только те, которые нужны в данной процедуре. Например, если там еще есть поля email, phone, gender и еще дофига, их все равно надо явно куда-то заселектить.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344078
antonelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

А вот такой запрос сработает в 12с:
Код: plaintext
1.
2.
3.
4.
5.
select 
(
select dummy z from 
(select dummy y from dual where dummy=d.dummy)
) z
from dual d
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344086
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antonelly,

матчасть учите. покамест - вы даже сути вещей не понимаете.
ну а в качестве бонуса - там сказано и про то, как ваши хотелки (повторюсь, ненормальные ) через вёрсты лесом, но таки реализовать
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344190
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishматчасть учите. покамест - вы даже сути вещей не понимаете.
ну а в качестве бонуса - там сказано и про то, как ваши хотелки (повторюсь, ненормальные ) через вёрсты лесом, но таки реализовать

Матчасть учил:

Oracle performs a correlated subquery when a nested subquery references a column from a table referred to a parent statement one level above the subquery . Но как уже случалось в прошлых версиях в 12C про это опять забыли :

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL> select  *
  2    from  v$version
  3  /

BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0
PL/SQL Release 12.1.0.1.0 - Production                                                    0
CORE    12.1.0.1.0      Production                                                                0
TNS for 64-bit Windows: Version 12.1.0.1.0 - Production                                   0
NLSRTL Version 12.1.0.1.0 - Production                                                    0

SQL> select (select dummy z from (select dummy y from dual where dummy=d.dummy)) z from dual d
  2  /

Z
-
X

SQL>



SY.
P.S. Было-бы непрохо если бы забыли напрочь .
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344196
Фотография Sacramento
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ламаюца устои как 10-летние привычки. То что вчера доказывали логически почему нельзя делать, сегодня делаецо само по себе.
Надо было подготовиццо как-то морально, иначе культурный шок обеспечен. Зажогсо огонек надежды об ампутации мутации триггеров на инсерте типа IIS, классика как ее тут назвали
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344197
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antonellystax..,

А вот такой запрос сработает в 12с:
Код: plaintext
1.
2.
3.
4.
5.
select 
(
select dummy z from 
(select dummy y from dual where dummy=d.dummy)
) z
from dual d

к сожленью, нет у меня 12-ки

но, надеюсь что отработает

.....
stax
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344235
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SY,

магия
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> var c clob
SQL> exec dbms_utility.expand_sql_text('select (select dummy z from (select dummy y from dual where dummy=d.dummy)) z from dual d',:c);

PL/SQL procedure successfully completed.

SQL> print c

C
-----------------------------------------------------------------------------------------------------------------------------------------------
SELECT  (SELECT "A1"."DUMMY" "Z" FROM  (SELECT "A3"."DUMMY" "Y" FROM "SYS"."DUAL" "A3" WHERE "A3"."DUMMY"=:B1) "A2") "Z" FROM "SYS"."DUAL" "A1"

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344244
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
нифига expand_sql не сходится c 10053
Код: plsql
1.
2.
Final query after transformations:******* UNPARSED QUERY IS *******
SELECT  (SELECT "D"."DUMMY" "Z" FROM "SYS"."DUAL" "DUAL" WHERE "DUAL"."DUMMY"="D"."DUMMY") "Z" FROM "SYS"."DUAL" "D"

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344256
antonelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishтам сказано и про то, как ваши хотелки (повторюсь, ненормальные ) через вёрсты лесом, но таки реализовать

ok, буду премного благодарен за ссылку.
Те есть запрос. Нужно в него добавить еще одно поле, которое вычисляется сложным запросом на основе полей, которые возвращает первый запрос. С минимальной вероятностью сломать то, что уже работает. Как профессионалы советуют это делать?Я бы запихнул второй запрос в функцию, благо в 12 g ee можно объявить на уровне запроса, а не схемы. Или есть лучший способ?

А насчет рефкрсора-может это и изврат из него селектить, но у нас уже есть куча легаси-функций, которые возвращают именно рефкурсор. Функции написаны отвратно, редактировать их сложно, долго, и опасно, тк можно сломать то, что уже работает. Поэтому было бы удобно написать обертку, которая вызывает такую функцию, и добавляет/удаляет из результата некоторые поля.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344284
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYМатчасть учил:
..
P.S. Было-бы непрохо если бы забыли напрочь
+1

ps (для ясности) тут кнопка влезла. про матчасть - это я к
antonellyНе стало ли возможным делать запрос из REF CURSOR?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344297
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antonellyorawishтам сказано и про то, как ваши хотелки (повторюсь, ненормальные ) через вёрсты лесом, но таки реализовать

ok, буду премного благодарен за ссылку.
Те есть запрос. Нужно в него добавить еще одно поле, которое вычисляется сложным запросом на основе полей, которые возвращает первый запрос. С минимальной вероятностью сломать то, что уже работает. Как профессионалы советуют это делать?Я бы запихнул второй запрос в функцию, благо в 12 g ee можно объявить на уровне запроса, а не схемы. Или есть лучший способ?

А насчет рефкрсора-может это и изврат из него селектить, но у нас уже есть куча легаси-функций, которые возвращают именно рефкурсор. Функции написаны отвратно, редактировать их сложно, долго, и опасно, тк можно сломать то, что уже работает. Поэтому было бы удобно написать обертку, которая вызывает такую функцию, и добавляет/удаляет из результата некоторые поля.
ну, плохо. я совсем не против рефкурсоров (и даже глубоко за ) ,но только когда используются они по назначению .
у вас же задача - модифицировать запрос , на основе которого кто-то до вас строил (и построил) рефкурсор.
разницу понимаете? фарш проворачивать "назад" - последнее дело. менять подход вам надо. работать с запросами
(с их исходными текстами и переменными привязки, а не с их экскрементами).
ну а ссылку на динамический эскуэль вам уже дали выше
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344304
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishссылку на динамический эскуэль вам уже дали выше
Вообще я давал ссылку на преобразование ref в dbms_sql и обратно - типа структуру ref cursor в динамике посмотреть, чтобы не "держать в актуальном состоянии" списки полей и все такое... хотя, почитав дальнейшее, ссылку давать бы уже не стал - у коллеги в голове все еще структурное программирование, не навредить бы...
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344308
antonelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот из описания не понял, что вернет следующий запрос:

SELECT eno,ename,sal FROM emp ORDER BY SAL DESC
FETCH FIRST 10 ROWS ONLY

Он вернет первые 10 емплоёв, или ВСЕХ эмплоёв, которые получают 10 самых больших зарплат?

И что с этой точки зрения вернет запрос с WITH TIES:

SELECT eno,ename,sal FROM emp ORDER BY SAL DESC
FETCH FIRST 10 ROWS ONLY WITH TIES;

Кто-н уже экспериментировал с этим?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344311
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderмагия

Да это я знаю. Вопрос в том как постоянно такое поведение. То-же самое было в какой-то из версий 10G а потом пропало.

SY.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344328
antonelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousу коллеги в голове все еще структурное программирование, не навредить бы...
Эээ. А какое программирование тут надо применять? Можно, конечно, использовать какой-н hibernate, он сам приджоинит и заселектит все, что нужно, и вернет объект. Но вроде обсуждаем средства БД оракл.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344339
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antonellyandrey_anonymousу коллеги в голове все еще структурное программирование, не навредить бы...
Эээ. А какое программирование тут надо применять?
...
вроде обсуждаем средства БД оракл.
Преимущественно декларативное, язык - SQL, все-таки средства СУБД обсуждаем :)
Попытки применять приемы структурного программирования при работе с запросами выглядят довольно неуклюже - это касается, в том числе, и идеи ваять функцию там, где SQL предполагает скалярный подзапрос либо соединение.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344400
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в прошлом году проскакивали сообщения о том, что в 12с приложат усилия по ускорению выполнения pl/sql кода вообще и строковых операций в частности.
Вопрос к экспериментирующим с 12с - можно ли как-то оценить фактическое состояние по этому вопросу.
Действительно ли на порядок ускорили "строковые операции", и отразилось ли это на работе с регулярными выражениями, например?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344462
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyи строковых операций в частностидаже не представляю, сколько человеко-лет нужно потратить, чтобы замедлить работу substr. Иначе как потом ускорять?!

boobyи отразилось ли это на работе с регулярными выражениями, например?регекспам уже не один десяток лет. Шансы, что оракл, внедряя их в бд позаимствовал не самый производительный код...
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344485
para+
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-регекспам уже не один десяток лет. Шансы, что оракл, внедряя их в бд позаимствовал не самый производительный код...

за 100% точность не ручаюсь и не удалось с хода найти статью где было иследование, но вроде класический bsd regexp lib некоторые операции исполняет _очень_ медленно, а если (и скорее всего) Oracle импортирует сторонний код с учетом лицензии, то есть некоторая вероятность, что может (могла) использоваться не самая быстрая реализация.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344521
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-boobyи строковых операций в частностидаже не представляю, сколько человеко-лет нужно потратить, чтобы замедлить работу substr. Иначе как потом ускорять?!


Разве substr написан на pl/sql, чтобы его принципиально нельзя было ускорить?
(Вообще, никогда ничего не надо делать сначала. Надо всегда все делать потом.)


-2-boobyи отразилось ли это на работе с регулярными выражениями, например?регекспам уже не один десяток лет. Шансы, что оракл, внедряя их в бд позаимствовал не самый производительный код...

В фильтрах запросов у регэкспов, даже при самой идеальной реализации, не так много шансов оказаться быстрыми. Хотя бы из-за высокой верятности парсить шаблон поиска на каждой строке фильтруемого набора.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38344671
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antonellyЯ имел в виду все поля в курсоре вообще, а не только те, которые нужны в данной процедуре. Например, если там еще есть поля email, phone, gender и еще дофига, их все равно надо явно куда-то заселектить.
SYS_REFURSOR можно использовать как источник для создания XMLTYPE, ну а дальше - XMLTABLE в зубы и выдирай то, что хочешь.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38347811
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не починили багу с датами в рекурсивных запросах?
запрос1
Код: plsql
1.
2.
3.
4.
with t (a,b) as (select to_date('01.01.2000','dd.MM.yyyy') as a, 1 as b from dual
                union all 
                select a+1, b+1 from t where b<10)
select b, a from t


запрос2
Код: plsql
1.
2.
3.
4.
with t (a,b) as (select cast(to_date('01.01.2000','dd.MM.yyyy') as date) as a, 1 as b from dual
                union all 
                select a+1, b+1 from t where b<10)
select b, a from t

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38347822
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
j2k,

это в 11.2.0.3 уже пофиксено было
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38347824
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
j2k,

ой, а в 12.1 опять поломано :D
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38347837
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
xtenderj2k,

ой, а в 12.1 опять поломано :Dобманул, все ок! ПРосто базы перепутал
11.2.0.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.
29.
30.
31.
32.
33.
34.
35.
SQL> select * from v$version where rownum=1;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

SQL> with t (a,b) as (select to_date('01.01.2000','dd.MM.yyyy') as a, 1 as b from dual
  2                  union all
  3                  select a+1, b+1 from t where b<10)
  4  select b, a from t;
                select a+1, b+1 from t where b<10)
                        *
ERROR at line 3:
ORA-01790: expression must have same datatype as corresponding expression


SQL> with t (a,b) as (select cast(to_date('01.01.2000','dd.MM.yyyy') as date) as a, 1 as b from dual
  2                  union all
  3                  select a+1, b+1 from t where b<10)
  4  select b, a from t;

         B A
---------- ---------
         1 01-JAN-00
         2 31-DEC-99
         3 30-DEC-99
         4 29-DEC-99
         5 28-DEC-99
         6 27-DEC-99
         7 26-DEC-99
         8 25-DEC-99
         9 24-DEC-99
        10 23-DEC-99

10 rows selected.

11.2.0.2
Код: 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.
SQL> select * from v$version where rownum=1;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Release 11.2.0.2.0 - 64bit Production

SQL> with t (a,b) as (select to_date('01.01.2000','dd.MM.yyyy') as a, 1 as b from dual
  2                  union all
  3                  select a+1, b+1 from t where b<10)
  4  select b, a from t;
                select a+1, b+1 from t where b<10)
                        *
ERROR at line 3:
ORA-01790: expression must have same datatype as corresponding expression


SQL> with t (a,b) as (select cast(to_date('01.01.2000','dd.MM.yyyy') as date) as a, 1 as b from dual
  2                  union all
  3                  select a+1, b+1 from t where b<10)
  4  select b, a from t;

         B A
---------- ---------
         1 01-JAN-00
         2 31-DEC-99
         3 30-DEC-99
         4 29-DEC-99
         5 28-DEC-99
         6 27-DEC-99
         7 26-DEC-99
         8 25-DEC-99
         9 24-DEC-99
        10 23-DEC-99

10 rows selected.

11.2.0.3
Код: 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.
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

SQL> with t (a,b) as (select to_date('01.01.2000','dd.MM.yyyy') as a, 1 as b from dual
  2                  union all
  3                  select a+1, b+1 from t where b<10)
  4  select b, a from t;

         B A
---------- ---------
         1 01-JAN-00
         2 02-JAN-00
         3 03-JAN-00
         4 04-JAN-00
         5 05-JAN-00
         6 06-JAN-00
         7 07-JAN-00
         8 08-JAN-00
         9 09-JAN-00
        10 10-JAN-00

10 rows selected.

SQL> with t (a,b) as (select cast(to_date('01.01.2000','dd.MM.yyyy') as date) as a, 1 as b from dual
  2                  union all
  3                  select a+1, b+1 from t where b<10)
  4  select b, a from t;

         B A
---------- ---------
         1 01-JAN-00
         2 02-JAN-00
         3 03-JAN-00
         4 04-JAN-00
         5 05-JAN-00
         6 06-JAN-00
         7 07-JAN-00
         8 08-JAN-00
         9 09-JAN-00
        10 10-JAN-00

10 rows selected.

12.1.0.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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
SQL> select * from v$version where rownum=1;

BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0

SQL> with t (a,b) as (select to_date('01.01.2000','dd.MM.yyyy') as a, 1 as b from dual
  2                  union all
  3                  select a+1, b+1 from t where b<10)
  4  select b, a from t;

         B A
---------- ---------
         1 01-JAN-00
         2 02-JAN-00
         3 03-JAN-00
         4 04-JAN-00
         5 05-JAN-00
         6 06-JAN-00
         7 07-JAN-00
         8 08-JAN-00
         9 09-JAN-00
        10 10-JAN-00

10 rows selected.

SQL> with t (a,b) as (select cast(to_date('01.01.2000','dd.MM.yyyy') as date) as a, 1 as b from dual
  2                  union all
  3                  select a+1, b+1 from t where b<10)
  4  select b, a from t;

         B A
---------- ---------
         1 01-JAN-00
         2 02-JAN-00
         3 03-JAN-00
         4 04-JAN-00
         5 05-JAN-00
         6 06-JAN-00
         7 07-JAN-00
         8 08-JAN-00
         9 09-JAN-00
        10 10-JAN-00

10 rows selected.

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38347842
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderj2k,

ой, а в 12.1 опять поломано :D
а у меня - нормуль
Код: 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.
Присоединен к:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing opt
ions


SQL> with t (a,b) as (select cast(to_date('01.01.2000','dd.MM.yyyy') as date) as a, 1 as b from dual
  2  		     union all
  3  		     select a+1, b+1 from t where b<10)
  4  select b, a from t;

         B A                                                                    
---------- --------                                                             
         1 01.01.00                                                             
         2 02.01.00                                                             
         3 03.01.00                                                             
         4 04.01.00                                                             
         5 05.01.00                                                             
         6 06.01.00                                                             
         7 07.01.00                                                             
         8 08.01.00                                                             
         9 09.01.00                                                             
        10 10.01.00                                                             

10 строк выбрано.

SQL> 
SQL> with t (a,b) as (select to_date('01.01.2000','dd.MM.yyyy') as a, 1 as b from dual
  2  		     union all
  3  		     select a+1, b+1 from t where b<10)
  4  select b, a from t;

         B A                                                                    
---------- --------                                                             
         1 01.01.00                                                             
         2 02.01.00                                                             
         3 03.01.00                                                             
         4 04.01.00                                                             
         5 05.01.00                                                             
         6 06.01.00                                                             
         7 07.01.00                                                             
         8 08.01.00                                                             
         9 09.01.00                                                             
        10 10.01.00                                                             

10 строк выбрано.

...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38347844
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
orawish,

да это я запутался в кучке своих тестовых :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Oracle Database 12c. Новые возможности языка SQL
    #38993188
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возрождаю хорошую тему...

* * *

Знаете ли вы, о полезной функции APPROX_COUNT_DISTINCT ,
которая появилась почти год назад в Oracle Database 12.1.0. 2 ?!

Работает намного быстрее обычной функции COUNT(DISTINCT expr)
и результаты дает весьма близкие к точным значениям!

Рекомендую: пробуйте и пользуйтесь!
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38995238
Nobody1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Валерий ЮринскийВозрождаю хорошую тему...

* * *

Знаете ли вы, о полезной функции APPROX_COUNT_DISTINCT ,
которая появилась почти год назад в Oracle Database 12.1.0. 2 ?!

Работает намного быстрее обычной функции COUNT(DISTINCT expr)
и результаты дает весьма близкие к точным значениям!

Рекомендую: пробуйте и пользуйтесь!

подозреваю, что это может быть нужно в основном в вопросах, близких к оценке статистики по таблицам...

в реальных приложениях вряд ли... тем более степенью точности управлять нельзя...
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38995259
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nobody1111тем более степенью точности управлять нельзя...Предположу, что для подсчета используется битовая хеш-таблица. Используемый буфер в миллион битов не так уж дорого, соответственно погрешность на миллион уников будет незначительной.
Для небольшого количества уников, и так помещающихся в память сессии, навряд ли будет заметный эффект, а миллионы уников обычно встречаются в статистическом анализе, где погрешность в пару процентов некритична.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #38995261
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Oracle Database 12c. Новые возможности языка SQL
    #39488513
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В марте 2017 г. стала доступна новая версия Oracle Database 12c R2 (12.2)

Давайте поделимся и обсудим нововведения!

* * *
Максимальная длина имен большинства объектов увеличена с 30 байт до 128 байт .

Максимальная длина идентификатора теперь может быть 192 байта:
Код: plaintext
1.
2.
"schema_name_128_byte"."table_name_128_byte"."column_name_128_byte"
1      + 128       +1+1+1    + 128       +1+1+1     + 128       + 1 = 192 

Для использования длинных имен должно быть установлено значение параметра
Код: plaintext
COMPATIBLE = 12.2
или выше!

Имена баз данных по-прежнему не более 8 байт

По-прежнему не более 30 байт:
Имена дисковых групп,

Имена подключаемых БД (PDBs),

Имена сегментов отката,

Имена табличных пространств и групп табличных пространств.

* * *

Это полезное нововведение!
Лично мне часто не хватало длины для именования ограничений целостности.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39488533
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий ЮринскийЭто полезное нововведение!..., если пишите для себя, а не тиражируемое ПО.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39488541
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicВалерий ЮринскийЭто полезное нововведение!..., если пишите для себя, а не тиражируемое ПО.Постепенно у всех будет Oracle Database 12.2+.

Поэтому можно будет использовать длинные имена и в том случае,
если пишете не для себя, а тиражируемое ПО.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39488550
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*PlusПостепенно у всех будет Oracle Database 12.2+.Розовая мечта, оторванная от действительности. Это ясно любому, кто читает форум.

P.S. Не надоело переодеваться?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39488562
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicSQL*PlusПостепенно у всех будет Oracle Database 12.2+.Розовая мечта, оторванная от действительности.
Это ясно любому, кто читает форум.
Любому, кто читает форум, ясно,
что никто уже не ориентируется на то,
что названия файлов DOS состояли из
не более, чем 8-ми символьного имени,
отделяемого точкой от не более,
чем 3-х символьного расширения.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39488564
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самое полезное нововвдение никто не собирается делать
Код: plsql
1.
  v_param1 += v_param2




такое не надо, уже моветон
Код: plsql
1.
  v_param1 += (v_param1 += v_param2++)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39488566
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Юринский,
А даст, например, возможность создать таблицу с именем 128 байт и столбец в ней 62 байта?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39488577
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j2kА даст, например, возможность создать таблицу с именем 128 байт и столбец в ней 62 байта?\rdbms\admin\dbmsstdx.sql
Код: plsql
1.
2.
3.
4.
5.
6.
7.
create or replace package dbms_standard is

  -- constant defines maximum name length possible
  ORA_MAX_NAME_LEN constant pls_integer := 128;

  -- types
   type ora_name_list_t is table of varchar2(2*(ORA_MAX_NAME_LEN+2)+1);
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39488581
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j2kВалерий Юринский,
А даст, например, возможность создать таблицу с именем 128 байт и столбец в ней 62 байта?Не понял, что именно вы хотите создать.
Вы напишите скрипт, а я его выполню на Oracle 12.2.
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39488603
хм...хм...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Валерий Юринский,

это ж новые возможности для людей с не традиционной ориентацией..., ну или с буйным воображением
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39488621
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
SELECT * FROM external_data EXTERNAL MODIFY (LOCATION (:new_location))



реально термодинамитная вещь
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39488648
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
впрочем, и реально термодинамитно бесполезная - нужно вбивать или константу или :bind переменную, которую в PL/SQL задать нельзя :(:(:(
аналогично - нельзя туда воткнуть ни PL/SQL функцию со значением, ни какой SYS_CONTEXT во вьюшке.

так и придется видно препросессором ходить /proc/$$/fd/ читать, чтоб понять, из какой я сессии запущен :\
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39488674
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch:bind переменную, которую в PL/SQL задать нельзя
Этот как?
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39488711
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbpatch:bind переменную, которую в PL/SQL задать нельзя
Этот как?

биндится только в клиентский курсор, а неявно в PL/SQL variables - нет
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39493067
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 12.2 появились новые типы объектов

ANALYTIC VIEW
ATTRIBUTE DIMENSION
HIERARCHY

Analytic views are metadata objects that provide a fast and efficient way
to create and store analytic queries of data in existing database tables and views.
With analytic views you can easily create complex analytic queries on large amounts
of hierarchical and dimensional data. Attribute dimensions, hierarchies,
and analytic views are new database schema objects.

Подробные примеры Analytic View на Oracle Live SQL website
https://livesql.oracle.com/apex/livesql/file/tutorial_EDVE861IID1QUD1NIUPU5ALEW.html

Еще один способ сломать голову программистам... :-)
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39493116
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchandrey_anonymousпропущено...

Этот как?

биндится только в клиентский курсор, а неявно в PL/SQL variables - нет

Чего же нельзя ?
Код: 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.
72.
73.
74.
75.
76.
77.
78.
79.
SQL>

SQL> create or replace directory bla as '/home/oracle';

Directory created.

SQL>

SQL> create table db_table(col01 varchar2(100));

Table created.

SQL>

SQL> CREATE TABLE ext_table (col01 varchar2(100))

  2  ORGANIZATION EXTERNAL

  3  (

  4  TYPE oracle_loader

  5  DEFAULT DIRECTORY bla

  6  ACCESS PARAMETERS

  7  (RECORDS DELIMITED BY NEWLINE)

  8  LOCATION ('x.dat')

  9  )

 10  REJECT LIMIT UNLIMITED;

Table created.

SQL>

SQL> select * from db_table;

no rows selected

SQL> exec  execute immediate 'insert into db_table select * from ext_table EXTERNAL MODIFY (LOCATION (:new_location))' using 'a.dat';

PL/SQL procedure successfully completed.

SQL> select * from db_table;

COL01

--------------------------------------------------------------------------------

i was in a.dat

SQL> rollback;

Rollback complete.

SQL> exec execute immediate 'insert into db_table select * from ext_table EXTERNAL MODIFY (LOCATION (:new_location))' using 'b.dat';

PL/SQL procedure successfully completed.

SQL> select * from db_table;

COL01

--------------------------------------------------------------------------------

i was in b.dat

SQL> rollback;

Rollback complete.

SQL>

SQL> exit

Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production



Regards

Maxim
...
Рейтинг: 0 / 0
Oracle Database 12c. Новые возможности языка SQL
    #39493302
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Demenkodbpatchпропущено...


биндится только в клиентский курсор, а неявно в PL/SQL variables - нет

Чего же нельзя ?


как только ты заставишь заработать нечто вроде

Код: plsql
1.
2.
3.
4.
5.
6.
DECLARE
  file_name VARCHAR2(1024) := '/tmp/test.tmp';
  file_data CLOB;
BEGIN
  SELECT data INTO file_data from ext_table EXTERNAL MODIFY (LOCATION (file_name));
END;



- ты обязательно приходи с откровениями о работоспособности, ок?
...
Рейтинг: 0 / 0
234 сообщений из 234, показаны все 10 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle Database 12c. Новые возможности языка SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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