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


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