Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Co to jest sekwencja w wyroczni?

Co to jest sekwencja w Oracle

  • Oracle Sequence to obiekt stworzony przez użytkownika, który może być udostępniany przez wielu użytkowników w celu generowania unikalnych liczb całkowitych
  • Najbardziej ogólnym zastosowaniem sekwencji byłoby wygenerowanie kolumny klucza głównego w tabeli.
  • Sekwencja jest generowana przez wewnętrzną procedurę Oracle, więc nie musimy się martwić o . Zaoszczędzi to tim3, ponieważ programista nie musi generować procedury produkującej sekwencję
  • Generator numerów sekwencyjnych, który można skonfigurować tak, aby zwiększał lub zmniejszał
  • Istnieje tylko w słowniku danych, może być ograniczony lub powtarzalny (cykl).
  • Potrzebujemy uprawnienia do tworzenia sekwencji, aby utworzyć sekwencję

Tworzenie sekwencji odbywa się za pomocą

UTWÓRZ SEKWENCJĘ

[ZACZNIJ OD]

[WZROST O]

[NIE/MIN.WARTOŚĆ]

[NIE/MAKS.WARTOŚĆ]

[NIE/CYKL]

[NIE/Pamięć podręczna];

Opis poszczególnych wartości

 

ZACZNIJ OD Definiuje początkową wartość sekwencji (domyślnie 1 ),
WZROST O Określa poziom wzrostu lub spadku (domyślny 1 ),
MIN.WARTOŚĆ Definiuje najniższą wartość dla malejącej sekwencji
MAXVALUE Definiuje najwyższą wartość dla rosnącej sekwencji
CYKL Określa, czy sekwencja się powtórzy
Pamięć podręczna Definiuje blok numerów sekwencyjnych przechowywany w pamięci (domyślnie 20 ), NOCACHE wymusza aktualizację słownika danych dla każdej liczby generowanej przez sekwencję

Przykłady

 

utwórz sekwencję test_tech start z 1
przyrostem o 1
maxvalue 10000
cykl
cache 20;

utwórz sekwencję test_tech1

zacznij od 1
przyrostu o 1
maksymalną wartość 4500000
cykl
nocache;

 

Jak używać sekwencji

Aby użyć sekwencji, po prostu użyj pseudokolumny CURRVAL i NEXTVAL

NEXTVAL pseudokolumna 

Służy do generowania kolejnego numeru sekwencji określonej sekwencji

Pseudokolumna CURRVAL 

Zawiera sekwencję, którą właśnie wygenerował użytkownik

WYBIERZ TEST_TECH.NEXTVAL Z DUAL;

WYBIERZ TEST_TECH.CURRVAL Z DUAL;

WYBIERZ TEST_TECH.NEXTVAL Z DUAL;

Jak modyfikować sekwencje

Możemy modyfikować sekwencje za pomocą zmiany sekwencji.

SQL> ZMIANA KOLEJNOŚCI tech_test1 WZROST O 50;

Zmiany mają wpływ tylko na przyszłe użycie sekwencji.

Musisz być właścicielem lub mieć uprawnienia do zmiany tej sekwencji

Nie możemy zacząć od opcji. Aby ta sekwencja musiała zostać usunięta i odtworzona

Zmiany sekwencji są również zatwierdzane

Jak usunąć sekwencję

Upuszczenie widoku odbywa się za pomocą polecenia sekwencji DROP.

Sekwencja upuszczania test_tech ;

Widoki słowników do przeglądania danych sekwencji

szczegóły sekwencji mogą być odpytywane ze słownika przez zapytanie USER_SEQUENCES, ALL_ SEQUENCES lub DBA_ SEQUENCES. Istnieją trzy kategorie widoków

USER_% Ten widok zawiera informacje tylko o obiektach należących do użytkownika

Przykład

USER_TABLES,USER_TAB_COLS

WSZYSTKO% Widok ten zawiera informacje o obiektach, do których użytkownik ma dostęp w bazie danych.

Przykład

ALL_TABLES,ALL_TAB_COLS

DBA_% Ten widok zawiera informacje o wszystkich obiektach w systemie i są to widoki ograniczone, dostępne dla użytkownika z rolą DBA

Przykład

DBA_TABLES,DBA_TAB_COLS

DBA_% wyświetleń informacji o sekwencjach WSZYSTKIE_% wyświetleń informacji o sekwencjach USER_% wyświetleń informacji o sekwencjach
Wyświetl sekwencje informacje dba_sequences wszystkie_ sekwencje sekwencje user_

Aby wyświetlić listę wszystkich sekwencji należących do bieżącego użycia

wybierz nazwę sekwencji z sekwencje_użytkownika;

Aby wyświetlić wszystkie sekwencje w bazie danych:

Wybierz właściciela, nazwa_sekwencji z dba_sequences;

Aby wyświetlić sekwencje dostępne dla bieżącego użytkownika:

wybierz nazwę sekwencji z all_sequences

Jak określić wszystkie informacje o sekwencji?

wybierz nazwa_sekwencji,min_wartość,maks_wartość,przyrost_o,ostatni_numer
Z DBA_SEKWENCJI

gdzie WŁAŚCICIEL =„
i sequence_NAME  =„”;

Jak pobrać bieżącą wartość sekwencji wyroczni bez jej zwiększania

Kolumna last_number wyświetla następny dostępny numer sekwencyjny, jeśli nie określono pamięci podręcznej

WYBIERZ ostatni_numer

Z sekwencji_użytkowników

GDZIE nazwa_sekwencji =„”;

Jak wyodrębnić definicję sekwencji (wyrażenia DDL) z bazy danych Oracle bez konieczności przechodzenia przez stos widoków słownikowych

Składnia:

SQL> set long 1000
SQL> set pagesize 0select DBMS_METADATA.GET_DDL('SEQUENCE','') z DUAL;

Jak ustawić wartość LASTVALUE w sekwencji Oracle

ZMIEŃ KOLEJNOŚĆ nazwa_sekw_tech WZROST O 250;

SELECT tech_seq_name.nextval FROM dual;

ZMIEŃ KOLEJNOŚĆ nazwa_kolejności_tech  WZROST O 1;

Jak zresetować sekwencję w Oracle

Jest wiele sposobów.

a) Możemy upuścić i odtworzyć sekwencję. Ale to unieważnia wszystkie obiekty zależne (wyzwalacze/procedury składowane itp.)

b) Możemy zresetować  za pomocą tych prostych kroków

Krok 1:Znajdź najnowszą wartość sekwencji

Wybierz tech_seq_name.nextval Z dual;

Krok 2:zmień sekwencję, zwiększając wartość ujemną ostatniej wartości

ALTER SEQUENCE nazwa_kolejności_tech WZROST O -  minwartość 0;

Krok 3  Wykonaj nextval, aby ustawić go z powrotem na zero

SELECT tech_seq_name.nextval FROM dual;

Krok 4:Zmień przyrost z powrotem na 1

ZMIEŃ KOLEJNOŚĆ nazwa_kolejności_tech  WZROST O 1;

Przykład

SELECT tech_seq_name.nextval FROM dual;

—————————————

250

ZMIEŃ KOLEJNOŚĆ nazwa_kolejności_tech WZROST O -250;

SELECT tech_seq_name.nextval FROM dual;

ZMIEŃ KOLEJNOŚĆ nazwa_kolejności_tech  WZROST O 1;

Więcej informacji znajdziesz pod tym linkiem

Jak zresetować sekwencję

Wpływ buforowania sekwencji

Sekwencje są buforowane w celu poprawy wydajności pobierania. W RAC każda instancja przechowuje wartości pamięci podręcznej

Podczas korzystania z pamięci podręcznej możemy mieć przerwy w sekwencji z następujących powodów

  1. Występuje wycofanie
  2. Awaria systemu lub awaria instancji
  3. Sekwencja jest używana w innej tabeli

W Oracle 12c pojawiła się nowa funkcja dla sekwencji

Sekwencje sesji

Nowe słowa kluczowe Oracle Database 12C SESSION, GLOBAL są dostępne, które można określić podczas tworzenia sekwencji
UTWÓRZ SEKWENCJĘ test_session_seq ZACZNIJ Z 1 PRZYROSTEM O 1 SESJĘ;
UTWÓRZ SEKWENCJĘ test_global_seq ZACZNIJ Z 1 PRZYROSTEM O 1 SESJĘ GLOBALNĄ;

Globalny Sesja
tworzy standardową sekwencję dobrze znaną w poprzedniej wersji. To jest ustawienie domyślne. tworzy sekwencję sesji nowego typu, która jest specjalnym typem sekwencji zaprojektowanym specjalnie do użycia z globalnymi tabelami tymczasowymi, które mają widoczność sesji. Sekwencja sesji zwraca unikalny zakres numerów sekwencyjnych tylko w ramach sesji, ale nie między sesjami. Kolejną różnicą jest to, że sekwencje sesji nie są trwałe. Jeśli sesja zniknie, tak samo stanie się stan sekwencji sesji, do których uzyskano dostęp podczas sesji.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak upuścić stół w wyroczni?

  2. Agregat Oracle do łączenia ciągów znaków przecinkiem i pisania niestandardowych agregatów

  3. Październik 2014Procesor ulega awarii ArcGIS Desktop

  4. Jak stworzyć sekwencję Oracle zaczynającą się od maksymalnej wartości z tabeli?

  5. Jaka jest różnica między funkcjami RANK() i DENSE_RANK() w Oracle?