sql >> Database >  >> RDS >> Oracle

Hoe Oracle DB-reeksen te gebruiken zonder het volgende volgnummer te verliezen in geval van terugdraaien

Vanuit mijn oogpunt moet je een reeks gebruiken en je niet langer zorgen maken over hiaten.

Vanuit jouw oogpunt zou ik zeggen dat het veranderen van de volgorde slechter is dan een tafel hebben. Houd er rekening mee dat toegang tot die tabel moet worden beperkt tot een enkele gebruiker, anders krijgt u dubbele waarden als twee (of meer) gebruikers er tegelijkertijd toegang toe hebben.

Hier is een voorbeeldcode; kijk, gebruik / pas het aan als je wilt.

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. Oracle SQL*Plus ACCEPT-verklaringen

  2. Is er een equivalent van SHA1() in MS-SQL?

  3. Rijen verwijderen met MySQL LEFT JOIN

  4. Voer tekst en speciale tekens in en MySQL