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

Kolumna automatycznego przyrostu — sekwencja jako wartość domyślna w Oracle

Kolumna automatycznego przyrostu jest dość powszechnym wymogiem w kodowaniu. Oto kilka sposobów na uzyskanie tego w Oracle

Automatyczny przyrost w Oracle

Ta funkcja (kolumna automatycznego przyrostu Oracle — sekwencja jako wartość domyślna) nie jest do tej pory obecna w bazie danych Oracle. Ale dzięki 12c Oracle jest w stanie to zapewnić.

Załóżmy, że chcemy ustawić tabelę wyroczni, w której sekwencja powinna być automatycznie zwiększana przy wstawianiu . Można to osiągnąć na wiele sposobów

Opcja 1
Przed Oracle 12c musimy użyć przed wstawieniem wyzwalaczy, aby to osiągnąć

utwórz tabelę test_lab(numer identyfikatora podstawowego nazwa klucza varchar (10));utwórz sekwencję test_lab_seq start z 1 przyrostem o 1 nocycle;utwórz lub zamień wyzwalacz test_lab_bef_autobefore wstaw w test_labdla każdego wierszabeginselect test_lab_seq.nextval do :new.idfrom dual;end; /

lub

utwórz lub zamień wyzwalacz test_lab_bef_auto
przed wstawieniem w test_lab
dla każdego wiersza
begin
:new.id :=test_lab_seq.nextval;
end;
/

Możemy określić, kiedy identyfikator jest pusty w wyzwalaczach, aby uniknąć błędów, gdy instrukcja INSERT ma wartość kolumny identyfikatora

wstaw do wartości test_lab ('john');wstaw do wartości test_lab ('scott');wstaw do wartości test_lab ('bill');wstaw do wartości test_lab ('tom');wstaw do wartości test_lab ('Duke ');commit;wybierz * z test_lab;

Opcja 2:
Dzięki Oracle 12c możemy bezpośrednio przypisać sekwencję nextval jako wartość domyślną dla kolumny, więc nie musisz już tworzyć wyzwalacza, aby wypełnić kolumnę następną wartością sekwencji, wystarczy zadeklarować ją za pomocą definicję tabeli.

utwórz sekwencję test_lab_seq start z przyrostem 1 o 1 nocycle;utwórz tabelę test_lab(numer identyfikacyjny domyślny klucz podstawowy test_lab_seq.nextval);wstaw do wartości test_lab ('Cat1');wstaw do wartości test_lab ('Cat2');wstaw do wartości test_lab ('Cat3');wstaw do wartości test_lab ('Cat4');wstaw do wartości test_lab ('Cat5');commit;wybierz * z test_lab;

Opcja 3
Dzięki 12c możemy korzystać z funkcji identyfikacji

utwórz tabelę test_lab (numer identyfikacyjny(10) GENERATED AS IDENTITY,nazwa varchar(15));Tabela utworzona.Desc TEST_LABName Null? Wpisz---- ---- ----ID NOT NULL NUMBER(10)NAME VARCHAR2(15)
  • Widać, że ograniczenie NOT NULL jest automatycznie nakładane na kolumnę tożsamości
  • Oracle wewnętrznie używa sekwencji do wypełniania wartości kolumny auto-inkrementacji.
wstaw do wartości test_lab ('Londyn');wstaw do wartości test_lab ('Nowy Jork');wstaw do wartości test_lab ('Tokio');wstaw do wartości test_lab ('Delhi');wstaw do wartości test_lab (' Bangalore');commit;wybierz * z test_lab;

Powiązane artykuły Oracle SQL

jak utworzyć tabelę w Oracle
Jak tworzyć widoki Oracle
Największe zapytania i podział na strony
jak pisać zapytania sql
Przetwarzanie dekodowania Oracle sql


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. czy klucz obcy zawsze odwołuje się do unikalnego klucza w innej tabeli?

  2. ORA-16205 Aktualizacja do 11.2.0.3

  3. Jak używać parametrów w klauzuli „where value in...”?

  4. nhibernate, wywołaj funkcję w Oracle, która zwraca refcursor sys

  5. Czy istnieje sposób na przekazanie przyjaznego dla użytkownika komunikatu o błędzie w przypadku naruszenia ograniczenia?