ホームページ  >  記事  >  データベース  >  Oracle シーケンス SEQUENCE 分析

Oracle シーケンス SEQUENCE 分析

WBOY
WBOY転載
2022-07-28 15:49:582282ブラウズ

この記事では、Oracle に関する知識を提供し、Oracle のシーケンス SEQUENCE についてサンプルコードを交えて詳しく紹介します。皆さんの勉強や仕事の参考になると思いますので、お役に立てれば幸いです。

Oracle シーケンス SEQUENCE 分析

推奨チュートリアル: 「Oracle ビデオ チュートリアル

1. シーケンスの紹介

Oracle のシーケンスは Aデータベース オブジェクト。その主な機能は一意の値を生成することです。シーケンスの作成後、データ ディクショナリを通じてシーケンス オブジェクトを見つけることができるため、シーケンスを複数のオブジェクトで共有できます。

2. シーケンスの作成

シーケンスは CREATE SEQUENCE 構文を使用して作成されます:

CREATE SEQUENCE sequence 
[INCREMENT BY n]
 [START WITH n]
 [{MAXVALUE n | NOMAXVALUE}]
 [{MINVALUE n | NOMINVALUE}]
 [{CYCLE | NOCYCLE}]
 [{CACHE n | NOCACHE}];
  • NCREMENT BY: シーケンスのステップ サイズを定義するために使用されます。省略した場合、デフォルトは 1 です。負の値の場合は、シーケンスの値が減少していることを意味します。
  • START WITH: シーケンスの初期値 (つまり、最初に生成される値) を定義します。デフォルトは 1 です。
  • MAXVALUE: シーケンスが生成できる最大値を定義します。 NOMAXVALUE はデフォルトのオプションで、最大値がないことを意味します。この時点で、増加シーケンスの場合、システムが生成できる最大値は 10 の 27 乗で、減少シーケンスの場合、最大値は -1 です。
  • MINVALUE: シーケンスが生成できる最小値を定義します。 NOMINVALUE はデフォルトのオプションで、最小値がないことを意味します。この時点で、降順シーケンスの場合、システムが生成できる最小値は、マイナス 10 の 26 乗であり、降順シーケンスの場合、最小値は 1 です。
  • CYCLE および NOCYCLE: シーケンス ジェネレータの値が制限に達したときにループするかどうかを示します。ループの場合、増加シーケンスの場合は最大値に達すると最小値にループし、降順シーケンスの場合は最小値に達すると最大値にループします。ループしない場合、制限値に達した後、新しい値を生成し続けるとエラーが発生します。
  • CACHE: シーケンスを保存するメモリ ブロックのサイズを定義します。デフォルトは 20 です。 NOCACHE は、シーケンスのメモリ バッファリングがないことを意味します。シーケンスのメモリ バッファリングにより、シーケンスのパフォーマンスが向上します。

例:

CREATE SEQUENCE invoice_seq
INCREMENT BY 1
START WITH 1
MAXVALUE 9999999
NOCYCLE NOCACHE;

3. クエリ シーケンス

シーケンスが作成されると、シーケンス作成コードはデータ ディクショナリ内でテキスト化され、次の場所にあります。 user_objects データ 次のように辞書で参照します。

SELECT object_name,object_id,object_type  FROM user_objects WHERE object_name = 'INVOICE_SEQ';

シーケンスの詳細は user_sequences テーブルに保存されます。

SELECT sequence_name, min_value, max_value, increment_by, last_number  FROM user_sequences;

4. シーケンス

NEXTVAL および CURRVAL を使用します。疑似列

  • NEXTVAL: 次に利用可能なシーケンス値を返します。毎回一意の参照値を返します。これは実際にはさまざまなユーザーに当てはまります。 sequence.NEXTVAL を使用すると、新しいシーケンス番号が生成され、現在のシーケンス番号が CURRVAL に入れられます。
  • CURRVAL: 現在のシーケンス値を取得します。 NEXTVAL を初めて使用する前に CURRVAL を使用すると、エラーが報告されます。

は次のように使用されます:

SELECT invoice_seq.CURRVAL,invoice_seq.NEXTVAL FROM DUAL;

INSERT INTO invoice  (invoice_id, vendor_id, invoice_number, invoice_total  )
      VALUES (invoice_seq.NEXTVAL, 10, 'INV' || invoice_seq.CURRVAL, 100  );

NEXTVAL と CURRVAL は次のコンテキストで使用できます:

  • は一部ではありませんサブクエリの SELECT ステートメントのフィールド リスト。
  • INSERT ステートメント内のサブクエリの SELECT リスト。 INSERT ステートメントの
  • VALUES 句。 UPDATE ステートメント内の
  • SET 句。

NEXTVAL と CURRVAL は、次のコンテキストでは使用できません:

  • ビューの SELECT リスト。
  • DISTINCT を指定した SELECT ステートメント。
  • GROUP BY、HAVING、または ORDER BY 句を含む SELECT ステートメント。
  • SELECT、DELETE、または UPDATE ステートメント内の句。
  • CREATE TABLE または ALTER TABLE ステートメントの DEFAULT 式。

ROLLBACK はシーケンス値をロールバックしないことにも注意してください。

5. シーケンスを変更します

例:

ALTER SEQUENCE invoice_seq     INCREMENT BY 2 MAXVALUE 10   NOCACHE  NOCYCLE;

シーケンスを変更する場合、次の制限があります:

  • テーブル シーケンス初期値では起動できません。
  • 最小値は現在の値より大きくすることはできません。
  • 最大値を現在の値より小さくすることはできません。
  • 変更されたシーケンス ルールは以前のシーケンス値には影響せず、将来のシーケンス値のみが影響を受けます。
  • ユーザーは ALTER SEQUENCE 権限を持っている必要があります。

6. シーケンスの削除

DROP SEQUENCE invoice_seq;

7. 自動インクリメント シーケンスの作成

1. シーケンスの作成

create sequence sq_recid 
minvalue 1 maxvalue 999999  increment by 1   start with 1 noCYCLE;

2. トリガーの作成

create or replace trigger  trg_test
  before  insert on test for each row
begin
  select sq_recid.nextval into :new.ID from dual;
end;

alter  trigger trg_test  enable;

3. C# では、シーケンスをテーブルに手動で挿入することもできます

string sql="insert into test(ID,otherCol)value (Sql_recid.nextval,***)
    retuing ID into :ID"

推奨チュートリアル: 「Oracle ビデオ チュートリアル

以上がOracle シーケンス SEQUENCE 分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。