zoukankan      html  css  js  c++  java
  • oracle序列

    oracle序列

    序列是一个数据库对象,多个用户可以从中生成唯一的整数。您可以使用序列自动生成主键值 ,生成序列号时,序列会递增,与事务提交或回滚无关。 如果两个用户同时递增相同的序列,则每个用户获取的序列号可能有间隙,因为序列号是由另一个用户生成的。一个用户永远无法获取另一个用户生成的序列号。 在由一个用户生成序列值之后,该用户可以继续访问该值,而不管该序列是否由另一个用户递增。

    序列号是独立于表生成的,因此相同的序列可用于一个或多个表。单个序列号可能会被跳过,因为它们是在最终回滚的事务中生成和使用的。另外,单个用户可能没有意识到其他用户正在从相同的序列中绘制。 创建序列后,可以在SQL语句中使用CURRVAL伪列访问其值,该伪列返回序列的当前值,或NEXTVAL伪列,它会递增序列并返回新值。

    必备条件

    • 具有创建序列的权限

    • 要在另一个用户的架构中创建序列,您必须具有CREATE ANY SEQUENCE系统权限。

    创建序列

    语法

    CREATE SEQUENCE [ schema. ] sequence
       [ { INCREMENT BY | START WITH } integer
       | { MAXVALUE integer | NOMAXVALUE }
       | { MINVALUE integer | NOMINVALUE }
       | { CYCLE | NOCYCLE }
       | { CACHE integer | NOCACHE }
       | { ORDER | NOORDER }
       ]...
    ;
    

    实验过程

    使用system用户登录,创建一个表空间(下面的datafile文件路径必须确保有文件夹)

    创建表空间

    create tablespace tbsp_test
    datafile 'G:/oracle/tablespace/tbsp_test.dbf'
    size 50M autoextend off;
    
    

    创建用户

    create User u_test
    identified by 111111
    default tablespace tbsp_test;
    

    授予resource角色

    grant resource to u_test;
    

    授予session权限

    grang create session to u_test;
    

    使用u_test登录

    discon;
    connect u_test/111111;
    

    创建一个序列

    create sequence u_test_emp_sequence
    increment by 5
    maxvalue 1000
    minvalue 10
    nocycle
    cache 30
    order;
    
    

    解释

    • increment 每次增长的值
    • maxvalue 最大值
    • minvalue 最小值
    • nocycle 不循环
    • cache 缓存序列个数
    • order 有序的

    使用序列

    select    u_test_emp_sequence.CURRVAL  from dual;
    

    错误记录

    ORA-08002: 序列 U_TEST_EMP_SEQUENCE.CURRVAL 尚未在此会话中定义。

    这是因为在一个新的会话中,序列需要初始化 。

    select    u_test_emp_sequence.nextval  from dual; -- 结果为10
    

    起始值为5所以下一个为5.

    在查询一次就成为了15了。

    此时再使用

    select    u_test_emp_sequence.CURRVAL  from dual;-- 现在可以得到15了
    

    修改序列

    修改最大值

    alter sequence u_test_emp_sequence
      maxvalue 30;
    

    当我们修改为30之后,再使用查询下一个序列执行几次之后,序列将被消耗完毕,再查询,就会出现序列无法实例化。

    同时修改多个参数值

    alter sequence u_test_emp_sequence
    increment by 2
    maxvalue 60 minvalue -5
    cycle
    cache 5;
    
    

    此时序列满了之后,他将会重新循环,注意,cache不能大于cycle的数量。

    比如最小值5,最大值18,步数为2,也就是说其中最多可用的数量为6,那么cahce数量就不能超过6.

    删除序列

    drop sequence u_test_emp_sequence;
    
  • 相关阅读:
    Saltstack module acl 详解
    Saltstack python client
    Saltstack简单使用
    P5488 差分与前缀和 NTT Lucas定理 多项式
    CF613D Kingdom and its Cities 虚树 树形dp 贪心
    7.1 NOI模拟赛 凸包套凸包 floyd 计算几何
    luogu P5633 最小度限制生成树 wqs二分
    7.1 NOI模拟赛 dp floyd
    springboot和springcloud
    springboot集成mybatis
  • 原文地址:https://www.cnblogs.com/qiudaozhang/p/9482744.html
Copyright © 2011-2022 走看看