• 【Oracle11g】13_序列


    1.序列的定义

    序列是用于生成唯一,连续序号的对象。序列可以是升序的,也可以是降序的

    2.创建序列

    CREATE SEQUENCE  stu_seq
    	START WITH 1 -- 指定第一个序号从 1 开始
    	INCREMENT BY 1 -- 指定序号之间的间隔为 1
    	MAXVALUE 2000 -- 表示序列的最大值为 2000
    	MINVALUE 1 -- 表示序列的最小值为 1
    	NOCYCLE -- 在达到最大值后停止生成下一个值
    	CACHE 10; -- 指定内存中预先分配的序号数 
    

    上述参数中,重点解释下CACHE 10,该参数的意思是:例如,现在获取的序列号是6,那么Oracle直接将6-16全部计算出来,存储到内存中,当前先把6返回,当下次再取7或者8等数字的时候,Oracle直接返回,这样效率比较高。所以CACHE就表示在内存预先储存多少个值

    小提示:Oracle创建sequence的时候,如果不指定cache,那么默认的cache是20

    3.查询某个用户是否有创建sequence的权限

    -- 使用scott登录
    SQL> conn scott/tiger@orcl
    
    -- 查询scott用户所属角色
    SQL> select u.username,u.granted_role from user_role_privs u;
    USERNAME                       GRANTED_ROLE
    ------------------------------ ------------------------------
    SCOTT                          CONNECT
    SCOTT                          RESOURCE
    
    -- 查看当前角色下所有的权限
    SQL> select * from role_sys_privs;
    ROLE                           PRIVILEGE                                ADMIN_OPTION
    ------------------------------ ---------------------------------------- ------------
    RESOURCE                       CREATE SEQUENCE                          NO
    RESOURCE                       CREATE TRIGGER                           NO
    RESOURCE                       CREATE CLUSTER                           NO
    RESOURCE                       CREATE PROCEDURE                         NO
    RESOURCE                       CREATE TYPE                              NO
    CONNECT                        CREATE SESSION                           NO
    RESOURCE                       CREATE OPERATOR                          NO
    RESOURCE                       CREATE TABLE                             NO
    RESOURCE                       CREATE INDEXTYPE                         NO
    9 rows selected
    -- 
    

    从上述结果可以可以看出scott用户拥有CREATE SEQUENCE的权限

    4.查询创建的序列

    SQL> select * from user_sequences;
    

    5.创建降序序列

    create sequence seq1 start with 1000 increment by -1 maxvalue 1000;
    

    6.访问序列的值

    通过序列的伪列来访问序列的值

    • NEXTVAL 返回序列的下一个值
    • CURRVAL 返回序列的当前值

    第一次使用序列中的值的时候,要使用NEXTVAL

    实战演练

    SQL> select seq1.nextval from dual; -- 第一次执行
       NEXTVAL
    ----------
          1000
    
    SQL> select seq1.nextval from dual; -- 第二次执行
       NEXTVAL
    ----------
           999
    
    

    7.修改序列

    使用ALTER SEQUENCE语句修改序列,不能更改序列的START WITH参数

    ALTER SEQUENCE stu_seq MAXVALUE 5000 CYCLE;
    

    8.删除序列

    使用DROP SEQUENCE语句删除序列

    DROP SEQUENCE stu_seq;
    

    9.实战案例:自定义自增长字段

    现在有学生表,有学生ID,学生名字,现在需要将ID自定义为A202004开头,并且从01、02...逐渐自增,示例如下:
    第一个学生:A20200401
    第二个学生:A20200402
    ...
    第99个学生:A20200499

    示例代码:

    SQL> create sequence seq_for_stu start with 1 increment by 1 maxvalue 99;
    Sequence created
    
    SQL> create table stu(id varchar(100),name varchar2(100));
    Table created
    
    SQL> insert into stu values('A202004'||to_char(seq_for_stu.nextval,'09MI'),'小明');
    1 row inserted
    
    SQL> insert into stu values('A202004'||to_char(seq_for_stu.nextval,'09MI'),'小红');
    1 row inserted
    
    SQL> insert into stu values('A202004'||to_char(seq_for_stu.nextval,'09MI'),'小张');
    1 row inserted
    
    SQL> commit;
    Commit complete
    
    SQL> SELECT * FROM stu;
    ID                                               NAME
    ------------------------------------------------ --------------- 
    A20200401                                        小明
    A20200402                                        小红
    A20200403                                        小张
    
    
  • 相关阅读:
    springMVC(注解版笔记)
    关于在Eclipse里面启动了服务,但是localhost:8080无法访问的问题:
    springmvc基础知识
    private
    hashtable,hashMap,vector和ArrayList
    使用IDEA创建java项目(hello word)
    设计模式
    设计模式(总纲)
    spring-boot集成PageHelper和通用Mapper
    spring-boot集成mybatis
  • 原文地址:https://www.cnblogs.com/OliverQin/p/12677003.html
Copyright © 2020-2023  润新知