順序(SEQUENCE)の作成と管理
1. 順序とは
表には一意キーが存在します。その一意キーは一意性を保持しなければならないため、適切な採番が必要になります。一意キーを管理するための表を作成すると管理表へアクセスが集中しパフォーマンス低下やロックを引き起こします。Oracleではこうした一意キーを採番するために「順序(Sequence)」オブジェクトをサポートします。順序は一意な番号を生成するための専用オブジェクトであり、複数ユーザに対応しています。
2. 順序作成(CREATE SEQUENCE)
順序の作成には「CREATE SEQUENCE」コマンドを使用します。順序が提供する機能を以下に示します。
初期値や増分を任意に指定可能(デフォルトは1)
増分をマイナスしていすることで、降順採番が可能
CYCLEを指定し、循環して採番することが可能(デフォルトはNOCYCLE)
CACHEを指定してメモリー上で管理し、パフォーマンス向上を図る
データベースを起動/停止しても値は戻らない
|
SQL> CREATE SEQUENCE テストNO
2 START WITH 1
3 INCREMENT BY 1
4 MAXVALUE 100
5 NOCYCLE
6 CACHE 20;
順序が作成されました。
|
3. 順序変更(ALTER SEQUENCE)
順序の変更は「ALTER SEQUENCE」コマンドを使用します。順序はMAXVALUEに達すると、これ以上値が割り振られずにエラーが表示されます。その際は、「ALTER SEQUENCE」コマンドを使用して変更する必要があります。
SQL> ALTER SEQUENCE テストNO
2 MAXVALUE 200;
順序が変更されました。
|
※ALTER SEQUENCE文の制限事項を以下に示します。
・「START WITH」オプションは変更できない。
・「現在採番済みの順序番号よりも小さいMAXVALUEに変更することは出来ない
4. 順序削除(DROP SEQUENCE)
順序の削除は「DROP SEQUENCE」コマンドを使用します。
SQL> DROP SEQUENCE テストNO;
順序が削除されました。
|
5. 順序の使用方法
順序は通常「INSERT」文の中で使用します。INSERT文の中で「順序名.NEXTVAL」と記述することで、一意な値が順序で指定した増分および最大値で採番されます。これはOracleではシステム全体で一意な順序番号となります。ただしロールバックを実行した場合は順序に欠番は生じます。
また直近に採番された値を参照するには、「順序名.CURRVAL」で取得することができます。
実際の使用例を以下に示します。
SQL> INSERT INTO TEST1(COL1,COL2,COL3)
2 VALUES(テストNO.NEXTVAL,SYSDATE, SYSDATE);
1行が作成されました。
SQL> SELECT テストNO.CURRVAL FROM DUAL;
CURRVAL
----------
1
|
|
スポンサードリンク
|