oracle sequence order_二次序列

oracle sequence order_二次序列文章目录1概述2语法2.1授权2.2创建序列2.3查询、修改、删除2.4使用序列3扩展3.1cache详解3.2cycle详解3.3常用获取序列的工具包1概述1.序列是什么:整数,一般是指从1开始的正整数2.序列有啥用:自动生成’主键’3.注意事项(1)建议’循环’使用序列(order),避免精度超出报错如:最终序列=当前年份+产生的序列(2)建议不对序列进行排序(noord..

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

文章目录

1 概述

1. 序列是什么:整数,一般是指从 1 开始的正整数
2. 序列有啥用:自动生成 '主键'
3. 注意事项
   (1) 建议 '循环' 使用序列(order),避免精度超出报错
       如:最终序列 = 当前年份 + 产生的序列       
   (2) 建议不对序列进行排序(noorder),排序消耗资源

 
 
 

2 语法

2.1 授权

-- 通用授权语句的查询方式
select distinct t.privilege
  from dba_sys_privs t
 where t.privilege like '%SEQUENCE%'
 order by t.privilege;
grant create sequence to <user_name>;
revoke create sequence from <user_name>;

 
 
 

2.2 创建序列

create sequence <sequence_name>
-- 以下皆为 "可选项"
[minvalue n | nominvalue] -- 最小值,默认不限制最小值 nominvalue
[maxvalue n | nomaxvalue] -- 最大值,默认不限制最大值 nomaxvalue
[start with n]            -- 初始值,默认 1
[increment by n]          -- 增量,正数递增,负数递减,默认 1
[cache n | nocache]       -- 是否缓存,缓存序列的个数,默认 20
[cycle | nocycle]         -- 是否循环,默认 nocycle
[order | noorder]         -- 是否排序,默认 noorder

 
 
 

示例:创建一个名为 seq_name 的序列

create sequence scott.seq_name
minvalue 1
maxvalue 99999999   -- 按业务量,适当调整
start with 1 
increment by 1 
cycle
cache 20
noorder;
-- 若多用户使用,则需要授权
grant select on scott.seq_name to <user_name>;

 
 
 

2.3 查询、修改、删除

-- 查询。可用视图:dba_sequences | all_sequences | user_sequences
select * 
  from all_sequences t
 where t.sequence_owner = 'SCOTT'
   and t.sequence_name = 'SEQ_NAME';
-- 修改。
alter sequence 序列名 参数 参数值;
alter sequence seq_name cache 30;
-- 删除
drop sequence seq_name;

 
 
 

2.4 使用序列

使用方式:先 '.nextval''.currval' -- 反之会报错
select seq_name.nextval from dual;
select seq_name.currval from dual;

 
 
 

示例:创建 “学生信息表”,并实现主键 “学号” 自增

-- 1.创建 '学生信息表'
create table scott.stu_info (
  sno   number(10) constraint pk_stu_info_sno primary key,
    sname varchar2(30)
);
-- 2.创建序列(上述已创建 seq_name)
-- 3.实现序列自增
insert into scott.stu_info(sno, sname) values(scott.seq_name.nextval, '小游子');
insert into scott.stu_info(sno, sname) values(scott.seq_name.nextval, '瑶瑶');
insert into scott.stu_info(sno, sname) values(scott.seq_name.nextval, '优优');

select scott.seq_name.currval 当前序列值 from dual;
select * from scott.stu_info;

查询结果:

sno		sname
1		小游子
2		瑶瑶
3		优优

 
 
 

3 扩展

3.1 cache 详解

1. 好处:'提升性能'
   (1) 当大量语句发生请求,申请序列时,为了避免序列在运用层实现序列而引起的性能瓶颈。
       Oracle 序列允许将序列提前生成 'cache n' 个先存入内存       
   (2) 申请序列语句,可直接到运行最快的内存中去得到序列。
       但 cache 个数也不能设置太大,
       因为在数据库重启时,会清空内存信息,预存在内存中的序列会丢失       
2. 坏处:"断层现象":'序列丢失'
   (1) 比如:cache 20,当 nextval = 1 时,此时清空缓存(或数据库服务器重启)
       下次 nextval 会 '从上次获取的最大值开始(含缓存)',而不是 '当前值' 开始计算! ,
       也就是说 nextval = 21, 
       若 此时继续 清空缓存,那么下次 nextval = 41

 
 
 

“断层现象” 测试 – 验证sql:

create sequence seq_name_test 
minvalue 1
maxvalue 100
start with 1
increment by 1
cache 20
nocycle;
select seq_name_test.nextval from dual; -- 1
alter system flush shared_pool; -- 慎用!清空缓存语句,仅供个人测试使用!
select seq_name_test.nextval from dual; -- 21
alter system flush shared_pool; 
select seq_name_test.nextval from dual; -- 41

 
 
 

3.2 cycle 详解

-- 必须满足如下公式: "缓存" <= "最大循环的次数"
cache <= ceil((maxvalue - minvalue) / abs(incrementby))

 
 
 
create sequence seq_name_cache_error
minvalue 10 -- 可修改此处为 1-9 均可
maxvalue 200
start with 10
increment by 10
cache 20
cycle
noorder;

 
 
 

若不满足上述公式,报错如下:
在这里插入图片描述
解释
cache = 20 > cycle 的值 = ceil((MaxValue - MinValue) / INCREMENT),也就是 ceil((200 - 10) / 10 = 19

3.3 常用获取序列的工具包

Oracle 获取序列的pkg【工具包】

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180400.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • pycharm可以打开ipynb文件吗_pycharm怎么运行ipynb文件

    pycharm可以打开ipynb文件吗_pycharm怎么运行ipynb文件Anaconda和Jupyter用得多,但是对于配置非常头痛,昨天jupyter无论如何都启动不了服务,重装了anaconda两次终于找到错误原因在哪了背景我的Pycharm下面有很多Project,每个Project一个Anaconda环境,昨天新开了一个Project叫CLRS_Code,Anaconda环境名也叫然后我之前没有在Pycharm里面用过Jupyter,突然想试试这个功能,然后就新建…

  • scratch编程小游戏——黄金矿工

    黄金矿工的玩法就是操控一个不断摆来摆去的钩子去挖出黄金,现在我们就来用scratch编一个黄金矿工首先新建好变量:矿车要画出许多的造型:代码:钩爪的绳索是这个游戏最为复制的一点,方法是移动后画出一条线,返回时用背景一样的颜色来覆盖,我们首先来画出造型:红色的是中心位置代码如下:(此代码需要用到一部分自定义,不懂的见文章末尾链接)自定义部分是这个代码的核心:接下来是黄金,造型的话要画出三个:大、中、小各一个代码如下:黄金代码是程序中非常重要的一环,一定不要有差错现

  • quartus ii运行错误_安装quartus时弹出错误

    quartus ii运行错误_安装quartus时弹出错误使用Quartus进行数字电路设计时,遇到了下面的编译错误:Info:*******************************************************************Info:RunningQuartusII64-BitAnalysis&SynthesisInfo:Version11.0Build1570…

    2022年10月15日
  • css字体发光样式_php语言入门

    css字体发光样式_php语言入门本文给大家介绍CSS3如何实现字体发光效果(代码实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。text-shadow该属性为文本添加阴影效果text-shadow:h-shadowv-shadowblurcolor;h-shadow:水平阴影的位置(阴影水平偏移量),可为负值,必需v-shadow:垂直阴影的位置(阴影垂直偏移量),可为负值,必需blur:阴…

    2022年10月17日
  • 【原创】让你的系统轻松预览AI,PSD,EPS,CDR缩略图!

    【原创】让你的系统轻松预览AI,PSD,EPS,CDR缩略图!不知道怎么回事,我机子上的IllustratorCS3搞上之后还是无法预览AI和EPS的缩略图,有时候需要选用素材的时候,面对着很多的文件无法预览,只能一个一个猜着看,今天终于无法忍受了.于是上网查了一下.原来搞定很简单,只需要把那些大软件的一些DLL文件搞进系统就行了.下边是整理的一些补丁,不用安装,只需要拷贝到特定目录然后再倒入注册表文件就行了.文件包里有具体的使用方法.文件:…

  • java遍历list对象集合_java遍历List集合的方法有哪些[通俗易懂]

    本文为大家分享了有序集合List中的四种遍历方式,希望能对大家有所帮助。(学习视频分享:java课程)先创建一个Student类,用来创建对象,并提供有参和无参构造方法。packagelesson1;publicclassStudent{Stringname;intage;publicStringgetName(){returnname;}publicvoidsetName…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号