Какво е последователността в oracle
- Oracle Sequence е обект, създаден от потребител, който може да бъде споделен от множество потребители за генериране на уникални цели числа
- Най-общата употреба на последователности би била генерирането на колона с първичен ключ в таблицата.
- Последователността се генерира от вътрешна рутина на Oracle, така че не е нужно да се притесняваме за . Това ще спести tim3, тъй като разработчикът не трябва да генерира рутина за създаване на последователност
- Генератор на последователни числа, може да бъде конфигуриран да увеличава или намалява
- Съществува само в речника на данните, може да бъде ограничен или повторяем (цикъл).
- Нуждаем се от привилегия за създаване на последователност, за да създадем последователността
Създаването на последователност се извършва с помощта на
СЪЗДАВАНЕ НА ПОСЛЕДОВАТЕЛНОСТ
[ЗАПОЧНЕТЕ С] [НАРАЩАНЕ С] [NO/MINVALUE] [NO/MAXVALUE] [НЕ/ЦИКЛ] [НЕ/КЕШ];
|
Описание на всяка стойност
ЗАПОЧНЕТЕ С | Той дефинира началната стойност на последователността (по подразбиране 1 ), |
НАРАЩАНЕ С | Той определя нивото на увеличаване или намаляване (по подразбиране 1 ), |
MINVALUE | Той дефинира най-ниската стойност за намаляваща последователност |
MAXVALUE | Той дефинира най-високата стойност за нарастваща последователност |
ЦИКЛ | Определя дали последователността ще се повтори |
КЕШ | Той дефинира блока от последователни номера, съхранявани в паметта (по подразбиране 20 ), NOCACHE принуждава речника на данните да се актуализира за всяко число, генерирано от последователността |
Примери
създаване на последователност test_tech начало с 1 инкремент с 1 maxvalue 10000 цикъл кеш 20;
създаване на последователност test_tech1
започнете с 1 |
Как се използват последователности
За да използвате последователност, просто използвайте псевдоколона CURRVAL и NEXTVAL
Псевдо колона NEXTVAL
Използва се за генериране на последователния номер на определената последователност
Псевдо колона CURRVAL
Той съдържа последователността, която потребителят току-що генерира
ИЗБЕРЕТЕ TEST_TECH.NEXTVAL ОТ DUAL;
ИЗБЕРЕТЕ TEST_TECH.CURRVAL ОТ DUAL; ИЗБЕРЕТЕ TEST_TECH.NEXTVAL ОТ DUAL; |
Как да модифицирате последователностите
Можем да модифицираме последователностите, като използваме алтер последователност.
SQL> ПРОМЕНИ ПОСЛЕДОВАТЕЛНОСТ tech_test1 НАРАЩАНЕ С 50; |
Промените засягат само бъдещото използване на последователността.
Трябва да сте собственик или да имате привилегия за промяна на тази последователност
Не можем да променим да започнем с опция. За тази последователност трябва да бъде премахната и пресъздадена
Промените в последователността също са валидирани
Как да премахнете последователността
Изтриването на изглед се извършва с помощта на команда DROP последователност.
Изпускане на последователност test_tech ; |
Речникови изгледи за преглед на данните за последователността
подробности за последователността могат да бъдат запитани от речника чрез запитване или USER_SEQUENCES, ALL_ SEQUENCES или DBA_ SEQUENCES. Има три категории изгледи
USER_% | Този изглед съдържа информация само за обектите, притежавани от потребителя
Пример USER_TABLES,USER_TAB_COLS |
ВСИЧКИ-% | Този изглед съдържа информация за обектите, до които потребителят има достъп в базата данни.
Пример ALL_TABLES,ALL_TAB_COLS |
DBA_% | Този изглед съдържа информация за всички обекти в системата и това са ограничени изгледи, които са достъпни за потребителя, който има роля на DBA
Пример DBA_TABLES,DBA_TAB_COLS |
DBA_% показвания за информация за последователности | ALL_% показвания за информация за последователности | USER_% показвания за информация за последователности | |
Преглед на последователности информация | dba_sequences | всички_ последователности | последователности_потребител |
За да изброите всички последователности, притежавани от текущата употреба
изберете име_на_последователност от потребителски_последователности;
За да изброите всички последователности в база данни:
Изберете собственик, име на последователност от dba_sequence;
За да изброите последователности, достъпни за текущия потребител:
изберете име_на последователност от всички_последователности
Как да определим цялата информация за последователността?
изберете име_на_последователност,минимална_стойност,макс.стойност,инкремент_по,последен_номер
ОТ DBA_SEQUENCES
където OWNER =‘
и последователност_NAME =‘
Как да извлечем текущата стойност на последователност от оракул, без да я увеличавам
Колоната last_number показва следващия наличен пореден номер, ако не е посочен кеш
ИЗБЕРЕТЕ последен_номер
FROM user_sequences WHERE име_на_последователност =‘<име_на_последователност>’; |
Как да извлечете дефиницията на последователността (DDL изрази) от база данни на Oracle, без да се налага да преминавате през куп изгледи на речник
Синтаксис:
SQL> задайте дълъг 1000 SQL> задайте размер на страницата 0изберете DBMS_METADATA.GET_DDL(‘SEQUENCE’,’<име_на_последователност>’) от DUAL;
|
Как да зададете стойността LASTVALUE в последователност на Oracle
ALTER SEQUENCE tech_seq_name НАРАЩАНЕ С 250;
SELECT tech_seq_name.nextval FROM dual; ALTER SEQUENCE tech_seq_name INCREMENT BY 1; |
Как да нулирате последователност в Oracle
Има много начини.
а) Можем да пуснем и да пресъздадем последователността. Но това анулира всички зависими обекти (задействания/съхранени процедури и т.н.)
б) Можем да нулираме с тези прости стъпки
Стъпка 1:Намерете най-новата стойност на последователността
Изберете tech_seq_name.nextval FROM dual; Стъпка 2:променете последователността с увеличаване на отрицателната стойност на най-новата стойност ALTER SEQUENCE tech_seq_name INCREMENT BY -<последна стойност> minvalue 0; Стъпка 3 Направете nextval, за да го върнете на нула SELECT tech_seq_name.nextval FROM dual; Стъпка 4:Променете увеличението обратно на 1 ALTER SEQUENCE tech_seq_name INCREMENT BY 1; Пример SELECT tech_seq_name.nextval FROM dual; —————————————— 250 ALTER SEQUENCE tech_seq_name НАРАЩАНЕ С -250; SELECT tech_seq_name.nextval FROM dual; ALTER SEQUENCE tech_seq_name INCREMENT BY 1; |
Можете да намерите повече на тази връзка
Как да нулирате последователността
Влияние от кеширането на последователностите
Последователностите се кешират с цел подобряване на производителността на извличане. В RAC всеки екземпляр съхранява стойностите на кеша
Може да имаме пропуски в последователността при използване на кеша поради следните причини
- Извършва се връщане назад
- Системен срив или срив на екземпляр
- Последователността се използва в друга таблица
Има нова функция в Oracle 12c за последователности
Последователности от сесии
С Oracle Database 12C са налични нови ключови думи SESSION, GLOBAL, които могат да бъдат посочени по време на създаване на последователностСЪЗДАВАНЕ НА ПОСЛЕДОВАТЕЛНОСТ test_session_seq СТАРТИ С 1 НАРАЩАНЕ С 1 СЕСИЯ;
СЪЗДАВАНЕ НА ПОСЛЕДОВАТЕЛНОСТ test_global_seq НАЧАЛО С 1 I1NC REGLMENT BY 1 I1;
Глобално | Сесия |
създава стандартна последователност, добре позната в предишната версия. Това е по подразбиране. | създава нов тип последователност от сесии, която е специален тип последователност, която е специално проектирана да се използва с глобални временни таблици, които имат видимост на сесията. Последователността на сесията връща уникален диапазон от последователни номера само в рамките на сесия, но не и между сесиите. Друга разлика е, че последователностите от сесии не са постоянни. Ако сесията изчезне, състоянието на последователностите от сесии, до които е бил достъпен по време на сесията. |