Veröffentlicht: von

  • Create Sequence: The default „START WITH 1 INCREMENT BY 1“ is the reason why the first given number has the value 2


-- Which value has NEXTVAL if an insert statement fails?

CREATE TABLE SEQ_TEST (
id NUMBER NOT NULL,
description VARCHAR2(25) NOT NULL
);

CREATE SEQUENCE SEQ_TEST_ID;
SELECT SEQUENCE_NAME, INCREMENT_BY, LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME = 'SEQ_TEST_ID';
-- SEQUENCE_NAME                  INCREMENT_BY    LAST_NUMBER
-- ------------------------------ --------------- ---------------
-- SEQ_TEST_ID                    1               1

— Second INSERT statement without description will violate NOT NULL constraint.
INSERT INTO SEQ_TEST (id, description) VALUES (SEQ_TEST_ID.NEXTVAL, 'first row');
INSERT INTO SEQ_TEST (id) VALUES (SEQ_TEST_ID.NEXTVAL);
INSERT INTO SEQ_TEST (id, description) VALUES (SEQ_TEST_ID.NEXTVAL, 'third row');
COMMIT;

SELECT id, description FROM SEQ_TEST;
-- ID              DESCRIPTION
-- --------------- -------------------------
-- 2               first row
-- 4               third row

Ein CURRVAL einer SEQUENCE kann erst benutzt werden, wenn vorher ein NEXTVALUE benutzt wurde.

Und es gibt auch kein CREATE OR REPLACE SEQUENCE, sollte mal jemand danach fragen.

Ein MAXVALUE kann auch negative sein, wenn MINVALUE kleiner als MAXVALUE ist und zusätzlich CYCLE angegeben ist.