Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment utiliser les séquences Oracle DB sans perdre le numéro de séquence suivant en cas de restauration

De mon point de vue, vous devriez utiliser une séquence et ne plus vous soucier des lacunes.

De votre point de vue, je dirais que modifier la séquence est pire que d'avoir une table. Notez que l'accès à cette table doit être limité à un seul utilisateur, sinon vous obtiendrez des valeurs en double si deux utilisateurs (ou plus) y accèdent simultanément.

Voici un exemple de code ; jetez-y un œil, utilisez-le/ajustez-le si vous le souhaitez.

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>