`

3.4 模式对象------------sequence

阅读更多
原文题目:  Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍(转)
先假设有这么一个表:
create table S_Depart  (
   DepartId             INT                             not null,
   DepartName           NVARCHAR2(40)                   not null,
   DepartOrder          INT                            default 0,
   constraint PK_S_DEPART primary key (DepartId)
);


   在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
1、Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
针对S_Depart创建的sequence如下:
create sequence S_S_DEPART
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
nocache;


一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回 sequence的当前值
NEXTVAL=增加sequence的值,然后返回 sequence 值
比如:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL

可以使用sequence的地方:
- 不包含子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- NSERT语句的valueS中
- UPDATE 的 SET中

可以看如下例子:
insert into S_Depart(departId,Departname,Departorder)values(S_S_Depart.Nextval,'12345',1);


SELECT empseq.currval FROM DUAL;

但是要注意的是:
- 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白?

- 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。

2、Alter Sequence
你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create .
Alter sequence 的例子
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXvalue 10000
CYCLE -- 到10000后从头开始
NOCACHE ;


影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。

可以很简单的Drop Sequence
DROP SEQUENCE order_seq;

一个简单的例子:

create sequence SEQ_ID
minvalue 1
maxvalue 99999999
start with 1
increment by 1
nocache
order;




建解发器代码为:

create or replace trigger tri_test_id
  before insert on S_Depart   --S_Depart 是表名
  for each row
declare
  nextid number;
begin
  IF :new.DepartId IS NULLor :new.DepartId=0 THEN --DepartId是列名
    select SEQ_ID.nextval --SEQ_ID正是刚才创建的
    into nextid
    from sys.dual;
    :new.DepartId:=nextid;
  end if;
end tri_test_id;


OK,上面的代码就可以实现自动递增的功能了。

分享到:
评论

相关推荐

    精通Hibernate:对象持久化技术第二版part3

    3.4 创建对象-关系映射文件 52 3.4.1 映射文件的文档类型定义(DTD) 52 3.4.2 把Customer持久化类映射到CUSTOMERS表 54 3.5 通过Hibernate API操纵数据库 58 3.5.1 Hibernate的初始化 61 3.5.2 访问Hibernate...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    3.4 创建对象-关系映射文件 52 3.4.1 映射文件的文档类型定义(DTD) 52 3.4.2 把Customer持久化类映射到CUSTOMERS表 54 3.5 通过Hibernate API操纵数据库 58 3.5.1 Hibernate的初始化 61 3.5.2 访问Hibernate...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     3.4 创建对象-关系映射文件  3.4.1 映射文件的文档类型定义(DTD)  3.4.2 把Customer持久化类映射到CUSTOMERS表  3.5 通过Hibernate API操纵数据库  3.5.1 Hibernate的初始化  3.5.2 访问Hibernate的Session...

    plsql_developer教程.pdf

    ##### 3.4 编译程序 - 通过菜单中的**编译**选项。 - 快捷键F5可以直接编译当前文件。 ##### 3.5 置换变量 - 支持使用特定语法声明和使用置换变量。 - 例如:`v_variable_name IN VARCHAR2`。 #### 四、测试程序 #...

    软件设计规范

    **3.4 部署视图(Deployment View)** 部署视图描述了系统的物理部署情况,也是可选部分。 **3.5 数据视图(Data View)** 数据视图描述了系统的数据结构和数据流,同样是可选项。 #### 四、设计工具的使用 **4.1 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     3.4 创建对象-关系映射文件  3.4.1 映射文件的文档类型定义(DTD)  3.4.2 把Customer持久化类映射到CUSTOMERS表  3.5 通过Hibernate API操纵数据库  3.5.1 Hibernate的初始化  3.5.2 访问Hibernate的Session...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     3.4 创建对象-关系映射文件  3.4.1 映射文件的文档类型定义(DTD)  3.4.2 把Customer持久化类映射到CUSTOMERS表  3.5 通过Hibernate API操纵数据库  3.5.1 Hibernate的初始化  3.5.2 访问Hibernate的Session...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     3.4 创建对象-关系映射文件  3.4.1 映射文件的文档类型定义(DTD)  3.4.2 把Customer持久化类映射到CUSTOMERS表  3.5 通过Hibernate API操纵数据库  3.5.1 Hibernate的初始化  3.5.2 访问Hibernate的Session...

    oracle数据库培训教程

    - **模式对象**: 包括表、视图、聚集、索引、程序单元等。 - 表:存储数据的基本单位。 - 视图:根据一个或多个表的查询结果创建的虚拟表。 - 聚集:一组相关表的集合。 - 索引:用于加速数据检索的特殊数据结构...

    hibernate 配置文件

    在Java开发环境中,Hibernate作为一款优秀的对象关系映射(Object-Relational Mapping,简称ORM)框架,极大地简化了数据库操作过程。本文将深入探讨Hibernate配置文件的相关知识点,帮助开发者更好地理解其结构与...

    UML面向对象建模与设计(第二版)

    设计模式是解决特定问题的一系列经验总结,提供了在特定情况下如何设计类和对象的有效方案。 #### 4.2 数据库设计 面向对象的设计也可以应用于数据库设计中,通过使用面向对象的语言和关系数据库来实现面向对象的...

    Python Cookbook

    - **3.4 Trimming Space from the Ends of a String** - **知识点:** 介绍如何去除字符串两端的空白字符,如使用 `strip()` 方法。 - **3.5 Combining Strings** - **知识点:** 展示如何合并多个字符串,可以...

    python中阶基础

    **3.4. 数字** - **整数**: `int` - **浮点数**: `float` - **复数**: `complex` - **创建**: ```python i = 10 f = 3.14 c = 2 + 3j ``` **3.5. list** - **定义**: 可变的有序序列。 - **创建**: ```...

    C++MFC教程

    |------ 3.4 文档,视,框架之间相互作用 |------ 3.5 利用序列化进行文件读写 |------ 3.6 MFC中所提供的各种视类介绍 +-- 第四章 窗口控件 |------ 4.1 Button |------ 4.2 Static Box |------ 4.3 Edit Box |----...

    oracle10g概念手册中英对照版

    - **数据字典(Data Dictionary):** 存储关于数据库元数据的信息,包括所有模式对象的定义。 - **视图:** Oracle提供了多种视图来访问数据字典,例如DBA_TABLES、ALL_TABLES等。 **2.6 内存体系结构** - **系统...

    HOLLiAS MACS V6.5.2用户操作手册

    - **3.2.2 控制分组(组操作)**:描述了如何将多个控制对象归类为一个组进行统一管理。 - **3.2.3 参数成组(参数)**:解释了如何将相似的参数组成一组以便于监控和调整。 ##### 3.3 操作面板 - **3.3.1 概述**:...

    计算机软考高级真题2022年上半年 系统分析师 综合知识.docx

    - **顺序图**(Sequence Diagram):用于展示对象之间的交互顺序,常用于描述系统中对象间的通信方式。 - **活动图**(Activity Diagram):表示工作流中的活动及其转换,常用来描述业务流程或程序控制流。 - **用例...

    高清彩版 Combine_Asynchronous_Programming_with_Swift_5.1_v1.0.0.pdf

    通过将异步编程抽象成简单的模式,Combine使得开发者能够更轻松地构建复杂的应用程序。 #### 1.2 Combine的基本概念 - **发布者(Publishers)**:发布者负责发送值和完成信号。 - **订阅者(Subscribers)**:订阅者...

    Oracle数据库基础知识

    - 修改数据库的归档模式,使用`ALTER DATABASE ARCHIVELOG`命令启用归档模式。 **3.15 如何修改Oracle数据库的SID** - 重新配置`init.ora`文件中的`SID`参数。 **3.16 Unix环境下如何实现自动备份** - 使用shell...

Global site tag (gtag.js) - Google Analytics