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


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