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

Oracleシーケンスの現在の値をインクリメントせずに取得するにはどうすればよいですか?

    SELECT last_number
      FROM all_sequences
     WHERE sequence_owner = '<sequence owner>'
       AND sequence_name = '<sequence_name>';
    

    user_sequencesからさまざまなシーケンスメタデータを取得できます 、all_sequences およびdba_sequences

    これらのビューはセッション間で機能します。

    編集:

    シーケンスがデフォルトのスキーマにある場合:

    SELECT last_number
      FROM user_sequences
     WHERE sequence_name = '<sequence_name>';
    

    すべてのメタデータが必要な場合:

    SELECT *
      FROM user_sequences
     WHERE sequence_name = '<sequence_name>';
    

    お役に立てば幸いです...

    編集2:

    キャッシュサイズが1でない場合に、より確実にそれを行うための長い道のりは次のようになります。

    SELECT increment_by I
      FROM user_sequences
     WHERE sequence_name = 'SEQ';
    
          I
    -------
          1
    
    SELECT seq.nextval S
      FROM dual;
    
          S
    -------
       1234
    
    -- Set the sequence to decrement by 
    -- the same as its original increment
    ALTER SEQUENCE seq 
    INCREMENT BY -1;
    
    Sequence altered.
    
    SELECT seq.nextval S
      FROM dual;
    
          S
    -------
       1233
    
    -- Reset the sequence to its original increment
    ALTER SEQUENCE seq 
    INCREMENT BY 1;
    
    Sequence altered.
    

    この間に他の人がシーケンスを使用している場合は、他の人(またはあなた)が

    を取得する可能性があることに注意してください。
    ORA-08004: sequence SEQ.NEXTVAL goes below the sequences MINVALUE and cannot be instantiated
    

    また、キャッシュをNOCACHEに設定することもできます。 リセットする前に、その後元の値に戻して、多くの値をキャッシュしていないことを確認します。



    1. SQL Serverが2つの整数を除算した結果を四捨五入するのはなぜですか?

    2. SQLServerの一時テーブルのスコープ

    3. MySQL比較データベース

    4. SQLServer2017バックアップ-1