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

オラクルのシーケンスとは

    Oracleのシーケンスとは

    • Oracle Sequenceは、ユーザーが作成したオブジェクトであり、複数のユーザーが共有して一意の整数を生成できます。
    • シーケンスの最も一般的な使用法は、テーブルに主キー列を生成することです。
    • シーケンスはoracle内部ルーチンによって生成されるため、心配する必要はありません。開発者はシーケンス生成ルーチンを生成する必要がないため、tim3を節約できます
    • 連番ジェネレーターは、増減するように構成できます
    • データディクショナリにのみ存在し、制限または繰り返し可能(サイクル)にすることができます。
    • シーケンスを作成するには、シーケンス作成権限が必要です

    シーケンスの作成は

    を使用して行われます
    CREATE SEQUENCE

    [開始]

    [増分]

    [NO / MINVALUE]

    [NO / MAXVALUE]

    [NO / CYCLE]

    [NO / CACHE];

    各値の説明

    開始 増分 最小値 減少するシーケンスの最小値を定義します 最大値 増加するシーケンスの最大値を定義します サイクル シーケンスが繰り返されるかどうかを定義します キャッシュ
    シーケンスの初期値を定義します(デフォルト1 )、
    増加または減少レベルを定義します(デフォルト1 )、
    メモリに保持されるシーケンス番号のブロックを定義します(デフォルト20 )、NOCACHEは、シーケンスによって生成された番号ごとにデータディクショナリを強制的に更新します

    シーケンスtest_techを1から開始
    1ずつインクリメント
    最大値10000
    サイクル
    キャッシュ20;

    シーケンスtest_tech1を作成

    1から始めます
    1ずつ増やします
    最大値4500000
    サイクル
    nocache;

    シーケンスの使用方法

    シーケンスを使用するには、CURRVALおよびNEXTVAL疑似列を使用するだけです

    NEXTVAL疑似列

    指定されたシーケンスの連続シーケンス番号を生成するために使用されます

    CURRVAL疑似列

    ユーザーが生成したばかりのシーケンスを保持します

    SELECT TEST_TECH.NEXTVAL FROM DUAL;

    SELECT TEST_TECH.CURRVAL FROM DUAL;

    SELECT TEST_TECH.NEXTVAL FROM DUAL;

    シーケンスを変更する方法

    シーケンスの変更を使用してシーケンスを変更できます。

    SQL> ALTER SEQUENCE tech_test1 INCREMENT BY 50;

    変更は、シーケンスの将来の使用にのみ影響します。

    あなたは所有者であるか、そのシーケンスの変更特権を持っている必要があります

    オプションで開始を変更することはできません。このシーケンスでは、削除して再作成する必要があります

    シーケンスの変更も検証されます

    シーケンスを削除する方法

    ビューの削除は、DROPシーケンスコマンドを使用して実行されます。

    ドロップシーケンスtest_tech;

    シーケンスデータを表示するための辞書ビュー

    シーケンスの詳細は、USER_SEQUENCES、ALL_ SEQUENCES、またはDBA_SEQUENCESのいずれかを照会することでディクショナリから照会できます。ビューには3つのカテゴリがあります

    USER_% このビューには、ユーザーが所有するオブジェクトの情報のみが含まれます

    USER_TABLES、USER_TAB_COLS

    ALL-% このビューには、ユーザーがデータベース内でアクセスできるオブジェクトの情報が含まれています。

    ALL_TABLES、ALL_TAB_COLS

    DBA_% このビューには、システム内のすべてのオブジェクトの情報が含まれています。これらは、DBAの役割を持つユーザーがアクセスできる制限付きのビューです。

    DBA_TABLES、DBA_TAB_COLS

    シーケンスについて表示 情報 すべてのシーケンス user_シーケンス
    シーケンス情報に関するDBA_%ビュー シーケンス情報に関するALL_%ビュー シーケンス情報に関するUSER_%ビュー
    dba_sequences

    現在使用されているすべてのシーケンスを一覧表示するには

    user_sequencesからsequence_nameを選択します;

    データベース内のすべてのシーケンスを一覧表示するには:

    dba_sequencesから所有者のsequence_nameを選択します;

    現在のユーザーがアクセスできるシーケンスを一覧表示するには:

    all_sequencesからsequence_nameを選択します

    シーケンスに関するすべての情報を確認するにはどうすればよいですか?

    sequence_name、min_value、max_value、increment_by、last_numberを選択します
    FROM DBA_SEQUENCES

    ここで、OWNER =‘
    and sequence_NAME =‘’;

    Oracleシーケンスの現在の値をインクリメントせずに取得する方法

    キャッシュが指定されていない場合、last_number列には次に使用可能なシーケンス番号が表示されます

    SELECT last_number

    FROM user_sequences

    WHERE sequence_name =‘’;

    ディクショナリビューのスタックを経由せずに、Oracleデータベースからシーケンス定義(DDLステートメント)を抽出する方法

    構文:

    SQL> set long 1000
    SQL> set pagesize 0select DBMS_METADATA.GET_DDL(‘SEQUENCE’、'’)from DUAL;

    OracleシーケンスでLASTVALUE値を設定する方法

    ALTER SEQUENCE tech_seq_name INCREMENT BY 250;

    SELECT tech_seq_name.nextval FROM dual;

    ALTER SEQUENCE tech_seq_name INCREMENT BY 1;

    Oracleでシーケンスをリセットする方法

    多くの方法があります。

    a)シーケンスを削除して再作成できます。ただし、これにより、すべての依存オブジェクト(トリガー/ストアドプロシージャなど)が無効になります

    b)これらの簡単な手順でリセットできます

    ステップ1:シーケンスの最新の値を見つける

    tech_seq_name.nextval FROM dual;

    を選択します

    ステップ2:最新の値の負の値の増分でシーケンスを変更します

    ALTER SEQUENCE tech_seq_nameINCREMENTBY-<最新の値>minvalue0;

    ステップ3nextvalを実行して、ゼロに戻します

    SELECT tech_seq_name.nextval FROM dual;

    ステップ4:増分を1に戻します

    ALTER SEQUENCE tech_seq_name INCREMENT BY 1;

    SELECT tech_seq_name.nextval FROM dual;

    —————————————

    250

    ALTER SEQUENCE tech_seq_name INCREMENT BY -250;

    SELECT tech_seq_name.nextval FROM dual;

    ALTER SEQUENCE tech_seq_name INCREMENT BY 1;

    このリンクで詳細を見つけることができます

    シーケンスをリセットする方法

    シーケンスのキャッシュの影響

    シーケンスは、フェッチパフォーマンスを向上させる目的でキャッシュされます。 RACでは、各インスタンスがキャッシュ値を保存します

    次の理由により、キャッシュを使用するときに順番にギャップが生じる可能性があります

    1. ロールバックが発生します
    2. システムクラッシュまたはインスタンスクラッシュ
    3. シーケンスは別のテーブルで使用されています

    Oracle12cにはシーケンス用の新機能があります

    セッションシーケンス

    Oracle Database 12Cでは、シーケンスの作成中に指定できる新しいキーワードSESSION、GLOBALを使用できます。
    CREATE SEQUENCE test_session_seq START WITH 1 INCREMENT BY 1 SESSION;
    CREATE SEQUENCE test_global_seq START WITH 1 INCREMENT BY 1 GLOBAL;

    グローバル セッション
    以前のリリースでよく知られている、標準のシーケンスを作成します。これがデフォルトです。 新しいタイプのセッションシーケンスを作成します。これは、セッションの可視性を持つグローバル一時テーブルで使用するように特別に設計された特別なタイプのシーケンスです。セッションシーケンスは、セッション内でのみ一意の範囲のシーケンス番号を返しますが、セッション間では返しません。もう1つの違いは、セッションシーケンスが永続的ではないことです。セッションが終了すると、セッション中にアクセスされたセッションシーケンスの状態も終了します。


    1. MySQLサーバー起動エラー'サーバーはPIDファイルを更新せずに終了しました'

    2. MicrosoftAccessのレポートにヘッダーとフッターを追加する方法

    3. SQL Server 2016:データベースを作成する

    4. MySQLデータベースで可能な値を列挙するにはどうすればよいですか?