`

Create Sequence

 
阅读更多

在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。 

 

1、Create Sequence

 

    首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。

 

    创建语句如下:

CREATE SEQUENCE seqTest
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

 

 

 

2、得到Sequence值 

 

定义好sequence后,你就可以用currVal,nextVal取得值。
    CurrVal:返回 sequence的当前值 
    NextVal:增加sequence的值,然后返回 增加后sequence值 

 

  得到值语句如下:
SELECT Sequence名称.CurrVal FROM DUAL; 
 

 

  如得到上边创建Sequence值的语句为:

 

select seqtest.currval from dual

 

 

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

 

如在插入语句中

insert into 表名(id,name)values(seqtest.Nextval,'sequence 插入测试');

 

 注:

 

    - 第一次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防止这种情况。

 

 

 

 

 

 

 

3、Alter Sequence 
    拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create。

 

 

 

例:

alter sequence SEQTEST maxvalue 9999999;

 4、Drop Sequence

 

DROP SEQUENCE seqTest; 

 

5、一个例子

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,上面的代码就可以实现自动递增的功能了。

 

 

 

 

 

 

    注::new 代表 数据改变后的新值,相对应的有 :old 原值

 

          := 代表 赋值

 

          :nextid表示引用sqlplus中定义的变量

                           

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    CreateSequence.rar_java midi_midi

    在`CreateSequence.java`中,我们可能找到以下关键概念: 1. **Sequence**: `javax.sound.midi.Sequence` 是一个MIDI序列,它包含了音乐的时间结构和事件数据。你可以把它看作是一个乐谱,其中包含了音符、节奏和...

    Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍

    要创建 SEQUENCE,需要有 CREATE SEQUENCE 或者 CREATE ANY SEQUENCE 权限。基本语法如下: ```sql CREATE SEQUENCE sequence_name INCREMENT BY increment START WITH start_value NOMAXVALUE | MAXVALUE max_value...

    Sequence简单介绍.pdf

    CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次递增值 START WITH 1 -- 起始值 NOMAXVALUE -- 无最大值限制 NOCYCLE -- 不循环 CACHE 10; -- 缓存10个值 ``` - **使用序列**: `NEXTVAL`和`CURRVAL`是...

    sequence等同于序列号

    创建`sequence`时,需要具有`CREATE SEQUENCE`或`CREATE ANY SEQUENCE`权限。以下是一个创建`sequence`的基本语法: ```sql CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次递增的数量 START WITH 1 -- 起始...

    oracle中sequence介绍及应用

    CREATE SEQUENCE [start WITH n] -- 开始位置,默认递增起始值为最小值,递减起始值为最大值 [increment BY n] -- 序列增量,默认值为1 [minvalue n | nomaxvalue] -- 最小值,nomaxvalue表示不设置最小值 ...

    ORACLE SEQUENCE的简单介绍

    为了在 Oracle 中使用 Sequence,首先需要确保拥有相应的权限,通常是 `CREATE SEQUENCE` 或者 `CREATE ANY SEQUENCE` 权限。创建 Sequence 的基本语法如下: ```sql CREATE SEQUENCE sequence_name INCREMENT BY ...

    Oracle sequence 重置(失效恢复)

    EXECUTE IMMEDIATE 'CREATE SEQUENCE ' || cur.sequence_name || ' START WITH ' || max1; END LOOP; END; / ``` 此块的功能是: - 遍历所有与主键约束关联的Sequence; - 调用`func_getseq`函数获取每个表的最大...

    oracle中的sequence实现主键增长

    使用`CREATE SEQUENCE`语句创建Sequence,例如: ```sql CREATE SEQUENCE S_Depart_sqs INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE CACHE 10; ``` 这里: - `INCREMENT BY`指定每次序列增加的数值...

    oracle 主键自增 sequence

    CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 NOCACHE -- 不建缓冲区 ``` - **INCREMENT BY**:指定...

    oracle 存储过程使用 sequence

    CREATE SEQUENCE USER_SEQ START WITH 1 INCREMENT BY 1 MINVALUE 1 NOMAXVALUE NOCYCLE; ``` 接下来,我们将在存储过程中使用这个Sequence。存储过程是由一系列PL/SQL语句组成的,可以有输入参数、输出参数或者...

    Oracle、DB2、PostgreSQL之Sequence总结

    CREATE SEQUENCE seq_test MINVALUE 10000 MAXVALUE 99999999999999999 START WITH 20000 INCREMENT BY 1 CACHE 20 CYCLE ORDER; ``` DB2的创建方式类似,但语法稍有不同: ```sql CREATE SEQUENCE seq_test AS ...

    通过实例了解Oracle序列Sequence使用方法

    CREATE SEQUENCE sequence_name [START WITH num] [INCREMENT BY increment] [MAXVALUE num|NOMAXVALUE] [MINVALUE num|NOMINVALUE] [CYCLE|NOCYCLE] [CACHE num|NOCACHE] 语法解析: ① START WITH:从某一个整数...

    oracle新建用户详细步骤

    cmd输入 sqlplus;... GRANT CREATE SESSION,CREATE TABLE,CREATE VIEW,CREATE SEQUENCE,UNLIMITED TABLESPACE TO 用户名; GRANT CONNECT TO 用户名; GRANT RESOURCE TO 用户名; GRANT DBA TO 用户名;

    使用JDeveloper开发WEB应用时同时使用Oracle的sequence和trigger

    编写类似`CREATE SEQUENCE seq_name START WITH 1 INCREMENT BY 1`的SQL语句,然后运行它来创建sequence。 2. **使用Sequence**:在实体类或者DAO层,你可以通过调用数据库的序列函数(如`seq_name.nextval`)来...

    主键生成器sequence

    CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次增加的数值 START WITH 1 -- 序列的初始值 NOMAXVALUE -- 没有最大值限制 NOCYCLE -- 达到最大值后不再循环 CACHE 10; -- 缓存10个值 ``` 在这个例子中,`emp_...

    bbs论坛项目运用SSH框架Oracle数据库编写的一个简单示列项目

    create sequence SEQ_USERID minvalue 1 maxvalue 9999991 start with 1 increment by 1 cache 20 order; --seq_tid -- Create sequence create sequence SEQ_TID minvalue 1 maxvalue 99999 start with 1 ...

    .net实现oracle数据库中获取新插入数据的id的方法

    CREATE SEQUENCE SEQ_test MINVALUE 1 MAXVALUE 99999999999999999999999999 START WITH 21 INCREMENT BY 1 CACHE 20; ``` 在插入数据到test表(包含id和name两列)时,可以使用序列的`nextval`属性来获取下一...

    SEQUECE唯一健值的使用

    创建一个`SEQUENCE`需要拥有`CREATE ANY SEQUENCE`权限。下面是创建一个名为`emp_sequence`的`SEQUENCE`示例: ```sql CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次递增值 START WITH 1 -- 起始值 ...

    oracle_sequence.rar_oracle

    创建Oracle序列使用CREATE SEQUENCE语句。例如,以下语句创建了一个名为"SEQ_TEST"的递增序列,初始值为1,每次增长1: ```sql CREATE SEQUENCE SEQ_TEST START WITH 1 INCREMENT BY 1; ``` 你可以根据需求调整序列...

    Oracle在表上建立自增字段的方法

    本方法为使用SEQUENCE(序列)  例如有表temp_test结构为:  create table TEMP_TEST...  CREATE SEQUENCE TEMP_TEST_IDADD INCREMENT BY 1 START WITH 1;  2、在表temp_test上建立触发器如下  CREATE OR REPL

Global site tag (gtag.js) - Google Analytics