sql >> データベース >  >> RDS >> Oracle

ロールバックの場合に次のシーケンス番号を失うことなくOracleDBシーケンスを使用する方法

    私の見解では、シーケンスを使用して、ギャップについて心配するのをやめるべきです。

    あなたの観点からすると、シーケンスを変更することは悪いと言えます。 テーブルを持つよりも。そのテーブルへのアクセスは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>
    


    1. MySQLデータベースの変更を追跡するためのトリガー

    2. IRI WorkbenchでのInformix(IDS12 DB)への接続

    3. Mysqlグループからの注文結果

    4. リモートデータベースに134675の値を挿入する最速の方法