Oracle 序列创建与删除
创建序列
CREATE SEQUENCE [序列名称]
INCREMENT BY 1 -- 每次加几
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值 若设置则为 [MAXVALUE 数值],也可以写[MINVALUE 数值]
NOCYCLE -- 一直累加,不循环
CACHE 10; -- 缓存cache个序列 也可以设置为不缓存 NOCACHE
示例:
CREATE SEQUENCE test_SEQ INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE CACHE 10;
解释:创建一个名为test_SEQ 的序列 要求从1开始计数,每次加1,不设上限,一次缓存10个数值
ALTER 序列
ALTER SEQUENCE test_SEQ CACHE 50;
注意:
如果要修改序列中START参数,必须先drop sequence 再重建
删除语句如下:
DROP SEQUENCE test_SEQ;
Oracle 序列值获取
以上述代码中序列名称为例
有如下定义
CurrVal:返回sequence的当前值
NextVal:下一个sequence值
分别对应SQL语句为
SELECT test_SEQ.CurrVal FROM SYS.DUAL; --SYS. 可不写
SELECT test_SEQ.NextVal FROM SYS.DUAL;
Oracle 序列应用
不包含子查询、VIEW的 SELECT 语句
INSERT 的子查询语句以及VALUSE中
UPDATE 的set语句
应用实例:一张表的自增字段
测试表
CREATE TABLE TEST1(
ID NUMBER(4)
,NUM NUMBER(4)
);
--自动插入触发器
CREATE OR REPLACE TRIGGER INSERT_TEST
BEFORE INSERT ON TEST1
FOR EACH ROW
DECLARE
NEXT_ID NUMBER(5);
BEGIN
SELECT test_seq.NEXTVAL INTO NEXT_ID FROM DUAL; --将下一个值取出
:NEW.ID := NEXT_ID; --插入的新的自增值
END INSERT_TEST;
--插入数据
INSERT INTO TEST1(num) VALUES(1);
注:由于该处写了触发器插入自增字段的数据,所以可以省略不写
若无触发器写法如下
INSERT INTO TEST1(id,num) VALUES(test_seq.nextval,1);
再吃点。。。。。。还差的远