Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да използвате Oracle DB последователности, без да губите следващия пореден номер в случай на връщане назад

От моя гледна точка трябва да използвате последователност и да спрете да се тревожите за пропуски.

От ваша гледна точка бих казал, че промяната на последователността е по-лоша отколкото да има маса. Имайте предвид, че достъпът до тази таблица трябва да бъде ограничен до един потребител, в противен случай ще получите дублиращи се стойности, ако двама (или повече) потребители имат достъп до нея едновременно.

Ето примерен код; погледнете, използвайте/коригирайте го, ако искате.

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. дизайн на база данни за настройки за уведомяване

  2. Проблеми при инсталиране на Oracle Database Express Edition 11g

  3. Oracle PL/SQL:Експортиране на данни от таблица в CSV

  4. SQL превключване от декодиране към регистър

  5. Oracle - Вземете данни от миналата година (Динамичен)