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;
    
  • 相关阅读:
    Web安全学习计划
    机器学习资源大全
    推荐引擎的学习资料
    《Servlet与JSP核心编程》读书笔记
    Application "org.eclipse.ui.ide.workbench" could not be found in the registry.问题的解决
    Android 百度地图开发(二)
    Linux系统编程_1_文件夹读取(实现简单ls命令)
    Bootstrap 模态框、轮播 结合使用
    cocos2d-x 3.0游戏实例学习笔记 《跑酷》移植到android手机
    Unique Binary Search Trees II
  • 原文地址:https://www.cnblogs.com/qiudaozhang/p/9482744.html
Copyright © 2011-2022 走看看