1. ホーム
  2. データベース
  3. 神託

オラクルにおけるNEXTVALの事例を解説

2022-01-07 19:16:19

シーケンスとは何か、その役割とは?

        Oracleデータベースにおけるシーケンスとは何ですか?また、その役割は何でしょうか?実は、シーケンスとは、テーブルの行に対してシーケンス番号を自動的に生成し、等間隔に並んだ値(数値型)の集合を生成するシーケンス番号生成器のことです。主な用途は、insert文の中で参照できるテーブルの主キー値を生成し、insert前にシーケンス番号のnextval値を取得し、insertすることです。また、クエリで現在値を確認したり、次の値までシーケンスを増加させるような使い方もできる。

2. シーケンスを定義するには?

  create sequence INR_REQUIRMENT_SQUENCE  
  INCREMENT BY 1 -- add a few at a time
  START WITH 1 -- start counting from 1
  NOMAXVALUE -- do not set maximum value
  NOCYCLE -- keep adding up, no loop
  CACHE 10;

    上記の文は、シーケンスを作成する?

 3. シーケンスの値はどのように取得するのですか?

       SELECT INR_REQUIRMENT_SQUENCE.CURRVAL FROM dual -- 現在のシーケンスの値を取得します。最初のNEXTVALは初期値を返し、その後のNEXTVALは自動的に定義した INCREMENT BY 値を増分して、増分した値を返します。常に現在のシーケンスの値を返しますが、最初のNEXTVALの初期化後までCURRVALを使用すべきではありません、さもなければエラーが発生します。1つのNEXTVALは1度だけシーケンスの値をインクリメントするので、同じ文の中で複数のNEXTVALを使用すると

4. Sequenceはどこで使えるの?

- サブクエリ、スナップショット、VIEWを含まないSELECT文

- サブクエリ内のINSERT文

- NSERT文のVALUESの中

- UPDATEのSET内

実用的な開発では、例えば、あるテーブルの主キーが最初に主キーIDを取得する必要がある場合、NEXTVALを使って次のフェッチシーケンス値を取得し、それから他の操作を行うことができます。

5. シーケンスの削除方法は?

         DROP sequence policy_id_seq; --policy_id_seq は、シーケンスの名前です。シーケンス内の初期値を変更したい場合は、まずシーケンス番号を削除してから作成する必要があります。シーケンスの所有者であるか、ALTER ANYシーケンス権限を持っていれば、シーケンスを変更し、Alter文を使って直接更新することができます。   

OracleのNEXTVALについては、この記事がすべてです。OracleのNEXTVALについては、BinaryDevelopの過去記事を検索していただくか、引き続き以下の関連記事をご覧ください。