私の見解では、シーケンスを使用して、ギャップについて心配するのをやめるべきです。
あなたの観点からすると、シーケンスを変更することは悪いと言えます。 テーブルを持つよりも。そのテーブルへのアクセスは1人のユーザーに制限する必要があることに注意してください。そうしないと、2人(またはそれ以上)のユーザーが同時にアクセスした場合に重複する値が取得されます。
これがサンプルコードです。ご覧になり、必要に応じて使用/調整してください。
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>