第一步,创建序列
create sequence seq_style
INCREMENT BY 1 -- 每次加的个数据
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
noCACHE;
第二步,创建触发器
create or replace trigger style_insert
before insert on style
for each row
begin
select seq_stylenextval into :newid from dual;
end;
不知道你为哪个字段创建自增序列,你把:newid里的那个id换成你表里字段名,其他不用改
你如果仅仅是要实现一个自增序列号 就用oracle的sequence呗 简单又方便
给你一个创建sequence例子,在数据库中先创建一个seq
CREATE SEQUENCE SEQ_XH
START WITH 1
MAXVALUE 99999999
MINVALUE 1
NOCYCLE
CACHE 10
ORDER;
然后你每次在程序里面要在数据表中新增记录的时候,相应主键字段就使用 SEQ_XHnextval 就可以实现自增字段了
snextval 不要直接放insert into里面
select snextval into l_seq from dual;
insert into table(seq) values(l_seq);
批量的话用数组
for i in 1 10000 loop
select snextval into l_seq(i) from dual;
end loop;
or:
服务器端直接写一个function,执行insert into 返回当前插入结果插入的seq
or方法很多很多
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10;
一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回 sequence的当前值
NEXTVAL=增加sequence的值,然后返回 sequence 值
比如:
emp_sequenceCURRVAL
emp_sequenceNEXTVAL
可以使用sequence的地方:
- 不包含子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- NSERT语句的VALUES中
- UPDATE 的 SET中
可以看如下例子:
INSERT INTO emp VALUES
(empseqnextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);
SELECT empseqcurrval 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 ;
序列是Oracle i提供的用于按照设定的规则自动产生数据的方案对象 在某些数据表的结构中 有些字段需要这种特性 比如 对于某个学生数据表的学号关键字段 用户可以希望在录入数据时 能够自动在上一个记录的学号字段上自动加 等 由于Oracle i提供的 种基本数据类型并没有这样的功能 可以通过序列方案对象来实现 序列的创建 下面介绍在企业管理器中如何创建序列 ( )在企业管理器中选择myoracle mynet/方案/序列选项 单击鼠标右键 在出现的快捷菜单里选择创建选项 如图 所示 ( )出现如图 所示的创建序列的一般信息选项卡 在名称文本框里输入待定义的序列的名称 TEMPSEQUENCE 在方案下拉列表框里选择序列所属的用户名 SCOTT 序列类型参数有两个选项 若选择升序单选钮 则表示将创建从初始值向最大值递增的序列 这是创建序列时的默认设置 若选择降序单选钮 则表示将创建从初始值向最小值递减的序列 对值可以进行设置的参数如下 在最小值文本框里设置序列允许的最小值 创建序列时该字段最初为空 如果单击创建按钮时该字段为空 则对升序序列使用默认值 而对降序序列使用默认值 在最大值文本框里设置序列允许的最大值 创建序列时该字段最初为空 如果单击创建按钮后该字段为空 则将对升序序列使用默认值 而对降序序列使用默认值 在时间间隔文本框里设置递增序列递增的间隔数值(升序序列)或递减序列递减的间隔数值(降序序列) 创建序列时该字段最初为空 如果单击创建按钮后该字段为空 将使用默认值 该字段只能为正整数 在初始值文本框里设置序列的起始值 如果单击创建按钮后该字段为空 对升序序列将使用该序列默认的最小值 对降序序列将使用该序列默认的最大值 对选项可以设置的参数如下 若选择循环值复选框 则表示指定在达到序列最小值或最大值之后 序列应继续生成值 对升序序列来说 在达到最大值后将生成最小值 对降序序列来说 在达到最小值后将生成最大值 如果未选择该复选框 序列将在达到最小值或最大值后停止生成任何值 默认情况下是未选择状态 若选择排序值复选框 则指定序列号要按请求次序生成 默认情况下是未选择状态 在高速缓存中设置由数据库预分配并存储的值的数目参数 若选择默认值单选钮 则表示将设置默认值为 默认情况下选择此选项 若选择无高速缓存单选钮 则表示指定不预分配序列值 若选择大小单选钮 则表示在文本框里输入可接受的值 最小值为 对循环序列来说 该值必须小于循环中值的个数 如果序列能够生成的值数的上限小于高速缓存大小 则高速缓存大小将自动改换为该上限数 完成设置后单击创建按钮 ( )成功创建序列后 出现如图 所示界面 单击 确定 按钮 ( )读者也可以在SQLPlus Worksheet中执行下列SQL程序创建序列 ―――――――――――――――――――――――――――――――――――――CREATE SEQUENCE SCOTT TEMPSEQUENCE INCREMENT BY START WITH MAXVALUE E MINVALUE NOCYCLE CACHE NOORDER―――――――――――――――――――――――――――――――――――――配套程序位置 第 章\ createsequence sql 序列的使用 下面介绍在向数据表中插入数据时如何使用序列 ( )首先为实例建立一个数据表 SCOTT SEQUENCE_TABLE 为简化起见 该数据表仅包含一个类型为 NUMBER 的数据列 NO 在如图 所示的创建表的一般信息选项卡中进行如下设置 在名称文本框中输入 SEQUENCE_TABLE 在方案下拉列表框中选择 SCOTT 在表空间下拉列表框中选择 USERS 在名称单元格中输入 NO 在数据类型下拉列表框单元格中选择 NUMBER 完成设置后单击创建按钮 ( )读者也可以在SQLPlus Worksheet中执行下列SQL代码创建数据表 SCOTT SEQUENCE_TABLE ―――――――――――――――――――――――――――――――――――――CREATE TABLE SCOTT SEQUENCE_TABLE ( NO NUMBER( ) NOT NULL)TABLESPACE USERS ―――――――――――――――――――――――――――――――――――――配套程序位置 第 章\ createsequencetable sql ( )在插入新的记录时 使用刚创建的 TEMPSEQUENCE 序列来自动产生 NO 数据列的值 在SQLPlus Worksheet里执行下面的SQL代码 执行的结果如图 所示 ―――――――――――――――――――――――――――――――――――――INSERT INTO SCOTT SEQUENCE_TABLE(NO)VALUES(SCOTT TEMPSEQUENCE NEXTVAL);―――――――――――――――――――――――――――――――――――――配套程序位置 第 章\ insertsequencetable sql SCOTT TEMPSEQUENCE NEXTVAL 表分配下一个惟一的 可用的序列号 执行 SCOTT TEMPSEQUENCE NEXTVAL 后 可以使用 SCOTT TEMPSEQUENCE CURRVAL 来标识上一个已经存储的序列值 ( )在SQLPlus Worksheet中可以执行查询数据表 SCOTT SEQUENCE_TABLE 数据的语句 执行结果如图 所示 表明序列 SCOTT SEQUENCE 产生的值已经成功录入数据表中 ―――――――――――――――――――――――――――――――――――――select from scott sequence_table;―――――――――――――――――――――――――――――――――――――配套程序位置 第 章\ selectsequencetable sql 序列的删除 下面介绍在企业管理器中如何删除序列 ( )在创建好的序列 SEQUENCE 上用单击鼠标右键 在出现的快捷菜单里选择移去选项 如图 所示 ( )出现如图 所示的删除序列确认界面 单击是按钮 lishixinzhi/Article/program/Oracle/201311/17301
1
increment by -2 递减 maxvalue的默认是-1 所以
START WITH 100 不能大于 MAXVALUE -1
2
递减序列为 maxvalue 也就是你第一个语句不写 start with 100的话 也是正确 相当于start with -1
第二个语句为什么是正确的 我就不解释了 呵呵
一般用PLSQL导入或导出序列即可。
1、用PLSQL登录oracle数据库。
2、在左边的树找到Sequences选项。
3、依次点击Sequences旁边的小箭头-要导出的序列名处右键-DBMS元数据-DDL。
4、然后将d出页面的内容复制即可。
5、导出完成。
6、要导入的话,登录到目标库。
7、点击左上角类似小纸片的按钮,选择SQL窗口。
8、把复制的语句粘贴到空白出,选中,点击上方类似齿轮的按钮,导入完成。
以上就是关于如何在oracle触发器中创建序列全部的内容,包括:如何在oracle触发器中创建序列、C#(winform)如何向oracle数据表中插入自增序列号(需要在oracle中建立sequence序列)!、多用户下oracle如何取得刚添加行的序列等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)