序列:是Oracle中的一个方案对象,创建后会保存到数据字典,可被多个用户用于产生唯一的序列号。
--第8章 序列和同义词
--代码8.1 创建序列示例表
--创建表seq01
drop table seq_01;
CREATE TABLE seq_01(ID NUMBER PRIMARY KEY, --主键id
NAME VARCHAR2(100) --字段名称
);
--创建表sequ02
CREATE TABLE seq_02(ID NUMBER PRIMARY KEY, --主键id
NAME VARCHAR2(100) --字段名称
);
drop table seq_02;
--代码8.2 创建序列
drop sequence seq_generator;
CREATE SEQUENCE seq_generator
INCREMENT BY 1 --增长幅度为1
START WITH 1 --起始值为1
MAXVALUE 9999999 --最大值
NOCYCLE NOCACHE; --不循环和缓冲
--显示使用序列
INSERT INTO seq_01 VALUES(seq_generator.NEXTVAL,'第1次使用序列'); --使用序列插入键值
INSERT INTO seq_02 VALUES(seq_generator.NEXTVAL,'第2次使用序列'); --使用序列插入键值
--查看数据
select * from seq_01;
select * from seq_02;
--清空数据
truncate table seq_01;
truncate table seq_02;
--代码 8.3 创建一个orders_seq的序列,从1000开始,每次的步进值为1
drop sequence orders_seq;
CREATE SEQUENCE orders_seq
START WITH 1000
INCREMENT BY 1
NOCACHE
NOCYCLE;
--代码8.4 创建代码键示例表
drop table orders;
CREATE TABLE orders(
order_id INT PRIMARY KEY, --订单id,
order_no VARCHAR2(20) NULL, --订单编号,
product_id INT NULL, --产品编号
qty NUMBER NULL, --订单数量
order_date DATE NULL ); --产品日期
--如果不显式的使用Nextval,而直接使用currval会导致抛出异常
SELECT orders_seq.CURRVAL FROM dual;
SELECT orders_seq.NEXTVAL,orders_seq.CURRVAL FROM dual;
--向orders表中插入一个新的订单
begin
for i in 1 .. 6 loop
INSERT INTO orders
(order_id, order_no, product_id, qty, order_date)
VALUES
(orders_seq.NEXTVAL, 'ORD' || orders_seq.CURRVAL, 0, 100, TRUNC(SYSDATE));
end loop;
end;
--查看数据
select * from orders;
--删除序列
drop sequence orders_seq;
--插入订单明细信息
INSERT INTO order_detail
(order_id, line_item_id, product_id)
VALUES
(orders_seq.currval, 3, 2381);
--修改序列
ALTER SEQUENCE seq_generator MAXVALUE 99999 CYCLE;
--修改序列的大小小于CURRVAL的大小
ALTER SEQUENCE seq_generator
INCREMENT BY 2
MAXVALUE 50
NOCACHE
NOCYCLE;
--删除一个序列
DROP SEQUENCE seq_generator;
--查询序列信息
SELECT sequence_name, min_value, max_value, increment_by, last_number
FROM user_sequences;