Oracle Sequences
This article demonstrates the common ways sequences can be used to generate synthetic or surrogate keys.
oracle miscconfigurationintermediate
by OracleDba
22 views
This article demonstrates the common ways sequences can be used to generate synthetic or surrogate keys.
12345
GRANT CREATE SEQUENCE TO my_user;
GRANT CREATE ANY SEQUENCE, ALTER ANY SEQUENCE, DROP ANY SEQUENCE, SELECT ANY SEQUENCE TO my_user;
GRANT SELECT ON my_user.my_seq TO another_user;123456789101112131415161718192021222324252627282930313233343536
CREATE SEQUENCE my_seq_1;
CREATE SEQUENCE my_seq_2 CACHE 50;
CREATE SEQUENCE my_seq_3
INCREMENT BY 10
MINVALUE 10
MAXVALUE 30
CYCLE;
SQL> SELECT my_seq_3.NEXTVAL FROM dual;
NEXTVAL
----------
10
1 row selected.
SQL> SELECT my_seq_3.NEXTVAL FROM dual;
NEXTVAL
----------
20
SQL> SELECT my_seq_3.NEXTVAL FROM dual;
NEXTVAL
----------
30
SQL> SELECT my_seq_3.NEXTVAL FROM dual;
NEXTVAL
----------
10
SQL>12345
ALTER SEQUENCE my_seq_3
INCREMENT BY 1
MINVALUE 1
MAXVALUE 1000000
NOCYCLE;123
DROP SEQUENCE my_seq_1;
DROP SEQUENCE my_seq_2;
DROP SEQUENCE my_schema.my_seq_3;123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
CREATE SEQUENCE my_seq;
SQL> SELECT
my_seq.NEXTVAL
FROM dual;
NEXTVAL
----------
1
SQL> SELECT
my_seq.NEXTVAL
,
my_seq.CURRVAL
FROM dual;
NEXTVAL CURRVAL
---------- ----------
2 2
1 row selected.
SQL> SELECT
my_seq.CURRVAL
FROM dual;
CURRVAL
----------
2
SQL> SELECT
my_seq.NEXTVAL
FROM dual;
NEXTVAL
----------
3
SQL>
SELECT
my_seq.NEXTVAL
FROM dual
CONNECT BY level <= 5;
NEXTVAL
----------
4
5
6
7
8
SQL>
CREATE TABLE t1 (id NUMBER);
INSERT INTO t1 (id) VALUES (
my_seq.NEXTVAL
);
INSERT INTO t1 (id) VALUES (
my_seq.NEXTVAL
);
COMMIT;
SELECT * FROM t1;
ID
----------
9
10
2 rows selected.
SQL>
SET SERVEROUTPUT ON
DECLARE
l_seq NUMBER;
BEGIN
SELECT
my_seq.NEXTVAL
INTO l_seq
FROM dual;
INSERT INTO t1 (id) VALUES (l_seq);
COMMIT;
DBMS_OUTPUT.put_line('l_seq=' || l_seq);
END;
/
l_seq=11
PL/SQL procedure successfully completed.
SQL>
DECLARE
l_seq NUMBER;
BEGIN
l_seq :=
my_seq.NEXTVAL
;
INSERT INTO t1 (id) VALUES (l_seq);
COMMIT;
DBMS_OUTPUT.put_line('l_seq=' || l_seq);
END;
/
l_seq=12
PL/SQL procedure successfully completed.
SQL>
BEGIN
INSERT INTO t1 (id) VALUES (
my_seq.NEXTVAL
);
COMMIT;
DBMS_OUTPUT.put_line('my_seq.CURRVAL=' ||
my_seq.CURRVAL
);
END;
/
my_seq.CURRVAL=13
PL/SQL procedure successfully completed.
SQL>Please to add comments
No comments yet. Be the first to comment!