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 |
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','
|
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 - 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
- Występuje wycofanie
- Awaria systemu lub awaria instancji
- 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 sekwencjiUTWÓ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. |