Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle Database 12c. Новые возможности языка SQL / 25 сообщений из 234, страница 1 из 10
11.07.2013, 17:16
    #38328444
Валерий Юринский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Database 12c. Новые возможности языка SQL
Здравствуйте, уважаемые коллеги!

Как вы уже знаете, 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
11.07.2013, 17:21
    #38328453
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Database 12c. Новые возможности языка SQL
Валерий Юринский,

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

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

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

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

так же довольно интересно выглядит применимость identity_clause.
На сколько понял, то в этом случае для столбца строится свой "персональный сиквенс".
Не совсем правда понимаю его смысл при наличии возможности указать в default нормальный сиквенс.
...
Рейтинг: 0 / 0
11.07.2013, 17:33
    #38328471
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Database 12c. Новые возможности языка SQL
pravednik,
ну так введение identity_clause это чтобы честно можно было сказать что мы не хуже всяких mssqlей)))
имхо граблей только добавиться. как и скрытых багов....
...
Рейтинг: 0 / 0
11.07.2013, 17:33
    #38328473
Валерий Юринский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Database 12c. Новые возможности языка SQL
По мнению Тома Кайта, которое он высказал вчера 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
11.07.2013, 17:36
    #38328480
Изя Кацман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Database 12c. Новые возможности языка SQL
фвафвыаываывПавел ВоронцовА это не опасно - CURRVAL указывать? Если в сессии INSERT INTO sq_emp будет первой командой - мы рискуем получить ошибку. Хотя.... наверно и правильно.Возможно, нельзя использовать CURRVAL в определении столбца без определения NEXTVAL в предыдущих столбцах.
Это было бы логично.Сероникий камрад!
Ты ляпнул полную хрень. Подумай еще. И лучше делать это головой :)

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

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

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

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

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

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

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

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

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

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

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

CURRVAL я специально использовал, чтобы показать,
как это использовать, чтобы "привязать" сотрудников
к только что созданному отделу.Чтобы привязать сотрудников к вновь созданному отделу лучше использовать RETURNING
...
Рейтинг: 0 / 0
11.07.2013, 22:01
    #38328742
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Database 12c. Новые возможности языка SQL
Валерий Юринский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
11.07.2013, 22:22
    #38328752
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Database 12c. Новые возможности языка 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.
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
11.07.2013, 22:22
    #38328754
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Database 12c. Новые возможности языка SQL
xtenderкстати интересен момент вызова:забыл написать, что это был пример с default xt_sq.nextval
...
Рейтинг: 0 / 0
11.07.2013, 22:34
    #38328765
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Database 12c. Новые возможности языка SQL
все 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
12.07.2013, 13:52
    #38329339
Валерий Юринский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Database 12c. Новые возможности языка SQL
xtenderВалерий Юринскийidentity_clause? Разберитесь с ней и расскажите нам.да тут в общем-то ничего особенного:...А покажите, пожалуйста, скрипт по созданию таблицы с Identity...
...
Рейтинг: 0 / 0
12.07.2013, 13:58
    #38329351
Валерий Юринский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Database 12c. Новые возможности языка SQL
Синтаксические диаграммы для Identity

identity_clause::=


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


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