Oracle系列之 sequence(序列)

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);

再吃点。。。。。。还差的远

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值