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

Jak korzystać z sekwencji Oracle DB bez utraty następnego numeru sekwencji w przypadku wycofania?

Z mojego punktu widzenia powinieneś użyć sekwencji i przestać martwić się o luki.

Z twojego punktu widzenia powiedziałbym, że zmiana kolejności jest gorsza niż posiadanie stolika. Zwróć uwagę, że dostęp do tej tabeli musi być ograniczony do jednego użytkownika, w przeciwnym razie otrzymasz zduplikowane wartości, jeśli dwóch (lub więcej) użytkowników ma do niej dostęp jednocześnie.

Oto przykładowy kod; spójrz, użyj/dostosuj, jeśli chcesz.

SQL> create table broj (redni_br number not null);

Table created.

SQL>
SQL> create or replace function f_get_broj
  2     return number
  3  is
  4     pragma autonomous_transaction;
  5     l_redni_br   broj.redni_br%type;
  6  begin
  7         select b.redni_br + 1
  8           into l_redni_br
  9           from broj b
 10     for update of b.redni_br;
 11
 12     update broj b
 13        set b.redni_br = l_redni_br;
 14
 15     commit;
 16     return (l_redni_br);
 17  exception
 18     when no_data_found
 19     then
 20        lock table broj in exclusive mode;
 21
 22        insert into broj (redni_br)
 23             values (1);
 24
 25        commit;
 26        return (1);
 27  end f_get_broj;
 28  /

Function created.

SQL> select f_get_broj from dual;

F_GET_BROJ
----------
         1

SQL> select f_get_broj from dual;

F_GET_BROJ
----------
         2

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. Przekazywanie pustych/pustych ciągów do procedury składowanej Oracle z asp.net

  2. wyrażenie regularne dla wszystkich znaków akcentowanych w Oracle

  3. ORA-28040:Brak pasującego wyjątku protokołu uwierzytelniania

  4. Jak korzystać z EXTRACT przez dbplyr podczas łączenia się z bazą danych Oracle?

  5. Łączenie się z Oracle za pomocą ADO