次のシーケンスを作成し、NEXTVALを連続して4回参照しました。4回目の参照結果はどうなりますか。
CREATE SEQUENCE s
START WITH 1 INCREMENT BY 1
MAXVALUE 3 NOCYCLE NOCACHE;
SELECT s.NEXTVAL FROM dual; -- 1回目
SELECT s.NEXTVAL FROM dual; -- 2回目
SELECT s.NEXTVAL FROM dual; -- 3回目
SELECT s.NEXTVAL FROM dual; -- 4回目 ← ?
次のシーケンスを作成し、NEXTVALを連続して4回参照しました。4回目の参照結果はどうなりますか。
CREATE SEQUENCE s
START WITH 1 INCREMENT BY 1
MAXVALUE 3 NOCYCLE NOCACHE;
SELECT s.NEXTVAL FROM dual; -- 1回目
SELECT s.NEXTVAL FROM dual; -- 2回目
SELECT s.NEXTVAL FROM dual; -- 3回目
SELECT s.NEXTVAL FROM dual; -- 4回目 ← ?A4 が返る
B1 に戻り、先頭から再採番される
CNULL が返る
Dエラーになる✓
解説正答:D
MAXVALUE 3 かつ NOCYCLE のシーケンスは、最大値に達したあとに NEXTVAL を参照すると エラー になります(ORA-08004: シーケンス s.NEXTVAL は MAXVALUE を超えており、インスタンス化できません)。
採番の流れ:
1回目 → 1
2回目 → 2
3回目 → 3 (ここで MAXVALUE に到達)
4回目 → ORA-08004 CYCLE を指定していた場合:
CYCLE を指定すると、最大値に達したあとは 最小値(昇順なら既定で1)に戻って循環 します。
CREATE SEQUENCE s2
START WITH 1 INCREMENT BY 1
MAXVALUE 3 CYCLE NOCACHE;
-- 採番: 1, 2, 3, 1, 2, 3, ...