sql >> Databáze >  >> RDS >> Oracle

Jak používat sekvence Oracle DB bez ztráty dalšího pořadového čísla v případě vrácení zpět

Z mého pohledu byste měli použít sekvenci a přestat se obávat mezer.

Z vašeho pohledu bych řekl, že změna sekvence je horší než mít stůl. Pamatujte, že přístup k této tabulce musí být omezen na jednoho uživatele, jinak získáte duplicitní hodnoty, pokud k ní přistupují dva (nebo více) uživatelé současně.

Zde je ukázkový kód; podívejte se, použijte/upravte jej, pokud chcete.

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. Existuje MySQL ekvivalent sprintf?

  2. jak mohu naplnit hodnotu dropdownboxu při výběru hodnoty jiného webu v php

  3. Vložte model Backbone.js do databáze MySQL

  4. PostgreSQL je pomalý na velké tabulce s poli a spoustou aktualizací