在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。
1、Create 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 插入测试');
注:
CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。
一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。
- 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组 到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。
拥有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.java`中,我们可能找到以下关键概念: 1. **Sequence**: `javax.sound.midi.Sequence` 是一个MIDI序列,它包含了音乐的时间结构和事件数据。你可以把它看作是一个乐谱,其中包含了音符、节奏和...
要创建 SEQUENCE,需要有 CREATE SEQUENCE 或者 CREATE ANY SEQUENCE 权限。基本语法如下: ```sql CREATE SEQUENCE sequence_name INCREMENT BY increment START WITH start_value NOMAXVALUE | MAXVALUE max_value...
CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次递增值 START WITH 1 -- 起始值 NOMAXVALUE -- 无最大值限制 NOCYCLE -- 不循环 CACHE 10; -- 缓存10个值 ``` - **使用序列**: `NEXTVAL`和`CURRVAL`是...
创建`sequence`时,需要具有`CREATE SEQUENCE`或`CREATE ANY SEQUENCE`权限。以下是一个创建`sequence`的基本语法: ```sql CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次递增的数量 START WITH 1 -- 起始...
CREATE SEQUENCE [start WITH n] -- 开始位置,默认递增起始值为最小值,递减起始值为最大值 [increment BY n] -- 序列增量,默认值为1 [minvalue n | nomaxvalue] -- 最小值,nomaxvalue表示不设置最小值 ...
为了在 Oracle 中使用 Sequence,首先需要确保拥有相应的权限,通常是 `CREATE SEQUENCE` 或者 `CREATE ANY SEQUENCE` 权限。创建 Sequence 的基本语法如下: ```sql CREATE SEQUENCE sequence_name INCREMENT BY ...
EXECUTE IMMEDIATE 'CREATE SEQUENCE ' || cur.sequence_name || ' START WITH ' || max1; END LOOP; END; / ``` 此块的功能是: - 遍历所有与主键约束关联的Sequence; - 调用`func_getseq`函数获取每个表的最大...
使用`CREATE SEQUENCE`语句创建Sequence,例如: ```sql CREATE SEQUENCE S_Depart_sqs INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE CACHE 10; ``` 这里: - `INCREMENT BY`指定每次序列增加的数值...
CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 NOCACHE -- 不建缓冲区 ``` - **INCREMENT BY**:指定...
CREATE SEQUENCE USER_SEQ START WITH 1 INCREMENT BY 1 MINVALUE 1 NOMAXVALUE NOCYCLE; ``` 接下来,我们将在存储过程中使用这个Sequence。存储过程是由一系列PL/SQL语句组成的,可以有输入参数、输出参数或者...
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 ...
CREATE SEQUENCE sequence_name [START WITH num] [INCREMENT BY increment] [MAXVALUE num|NOMAXVALUE] [MINVALUE num|NOMINVALUE] [CYCLE|NOCYCLE] [CACHE num|NOCACHE] 语法解析: ① START WITH:从某一个整数...
cmd输入 sqlplus;... GRANT CREATE SESSION,CREATE TABLE,CREATE VIEW,CREATE SEQUENCE,UNLIMITED TABLESPACE TO 用户名; GRANT CONNECT TO 用户名; GRANT RESOURCE TO 用户名; GRANT DBA TO 用户名;
编写类似`CREATE SEQUENCE seq_name START WITH 1 INCREMENT BY 1`的SQL语句,然后运行它来创建sequence。 2. **使用Sequence**:在实体类或者DAO层,你可以通过调用数据库的序列函数(如`seq_name.nextval`)来...
CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次增加的数值 START WITH 1 -- 序列的初始值 NOMAXVALUE -- 没有最大值限制 NOCYCLE -- 达到最大值后不再循环 CACHE 10; -- 缓存10个值 ``` 在这个例子中,`emp_...
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 ...
CREATE SEQUENCE SEQ_test MINVALUE 1 MAXVALUE 99999999999999999999999999 START WITH 21 INCREMENT BY 1 CACHE 20; ``` 在插入数据到test表(包含id和name两列)时,可以使用序列的`nextval`属性来获取下一...
创建一个`SEQUENCE`需要拥有`CREATE ANY SEQUENCE`权限。下面是创建一个名为`emp_sequence`的`SEQUENCE`示例: ```sql CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次递增值 START WITH 1 -- 起始值 ...
创建Oracle序列使用CREATE SEQUENCE语句。例如,以下语句创建了一个名为"SEQ_TEST"的递增序列,初始值为1,每次增长1: ```sql CREATE SEQUENCE SEQ_TEST START WITH 1 INCREMENT BY 1; ``` 你可以根据需求调整序列...
本方法为使用SEQUENCE(序列) 例如有表temp_test结构为: create table TEMP_TEST... CREATE SEQUENCE TEMP_TEST_IDADD INCREMENT BY 1 START WITH 1; 2、在表temp_test上建立触发器如下 CREATE OR REPL