求职简历网 > 知识 >

oraclesequence

来源:求职简历网时间:2024-04-11 14:28:07编辑:皮带君

ORACLE中怎么设置SEQUENCE权限?

ORACLE中怎么设置SEQUENCE权限步骤如下:1、Create Sequence首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。创建语句如下: CREATE SEQUENCE seqTestINCREMENT BY 1 -- 每次加几个START WITH 1 -- 从1开始计数NOMAXvalue -- 不设置最大值NOCYCLE -- 一直累加,不循环CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE2、得到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 插入测试');3、Alter Sequence 拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create。4、Drop SequenceDROP SEQUENCE seqTest; 5、一个例子create or replace trigger tri_test_idbefore insert on S_Depart --S_Depart 是表名for each rowdeclarenextid number;beginIF :new.DepartId IS NULLor :new.DepartId=0 THEN --DepartId是列名select SEQ_ID.nextval --SEQ_ID正是刚才创建的into nextidfrom sys.dual;:new.DepartId:=nextid;end if;end tri_test_id;

如何在Oracle中使用Sequence

  给你搜索了一段:


  ORACLE 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;
  另: SEQUENCE_CACHE_ENTRIES参数,设置能同时被cache的sequence数目。
  
  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中定义的变量


请问oracle中的序列是干什么用的?

序列是一数据库对象,利用它可生成唯一的整数。一般使用序列自动地生成主码值。一个序列的值是由特殊的Oracle程序自动生成,因此序列避免了在应用层实现序列而引起的性能瓶颈。Oracle序列允许同时生成多个序列号,而每一个序列号是唯一的。当一个序列号生成时,序列是递增,独立于事务的提交或回滚。允许设计缺省序列,不需指定任何子句。该序列为上升序列,由1开始,增量为1,没有上限。 1) 建立序列命令 网管网 www.bitscn.com CREATE SEQUENCE [user.]sequence_name [increment by n] [start with n] [maxvalue n | nomaxvalue] [minvalue n | nominvalue]; INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。 START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。 MAXVALUE:指定序列可生成的最大值。 NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1。 MINVALUE:指定序列的最小值。 NOMINVALUE:为升序指定最小值为1。为降序指定最小值为-1026。 网管网www_bitscn_com 2) 更改序列命令 网管网www_bitscn_com ALTERSEQUENCE [user.]sequence_name [INCREMENT BY n] [MAXVALUE n| NOMAXVALUE ] [MINVALUE n | NOMINVALUE]; 修改序列可以: ? 修改未来序列值的增量。 ? 设置或撤消最小值或最大值。 ? 改变缓冲序列的数目。 ? 指定序列号是否是有序。 网管u家u.bitscn@com 3) 删除序列命令 中国网管联盟bitsCN.com DROP SEQUENCE [user.]sequence_name; 从数据库中删除一序列。 网管联盟bitsCN@com 创建一个序列号的语句: 中国网管联盟bitsCN.com CREATE SEQUENCE EXAM_NO_SEQ START WITH 1484 MAXVALUE 9999999999 MINVALUE 1 CYCLE CACHE 20 NOORDER; 网管网www_bitscn_com PB中取序列号的用法: 网管bitscn_com string v_exam_no //获取申请序号 SELECT exam_no_seq.nextval INTO :v_exam_no FROM dual using ghis_database; if ghis_database.SQLCODE0 then messagebox("","取检查序号出错") return end if【转自 www.bitsCN.com】


关于oracle 序列器

1)首先,主键的递增是人为通过业务类型定义出来实现递增功能的(比如,每插入一条新记录就+1操作,可能会是通过触发器来实现的),而序列(sequence)是oracle内置的东西,开销会比通过触发器(会涉及到io以及事务锁等方面的东西)来做少很多。
价值方面来讲,举个例子,在oracle rac环境中,一个cache值设定合理的noorder序列,就远比其他方式要好,这部分,我相信dba们会深有感触。

2) 序列有个nextval的属性,可以通过查询一次就会生成一次下一个序列,ex:
select myseq.nextval from dual; --->当前返回10
再执行一次,返回11
...
同理,还有一个currval,用于查询当前序列值。

给你转发一下concepts上对sequence的描述:
  The sequence generator provides a sequential series of numbers. The sequence generator is especially useful in multiuser environments for generating unique sequential numbers without the overhead of disk I/O or transaction locking. For example, assume two users are simultaneously inserting new employee rows into the employees table. By using a sequence to generate unique employee numbers for the employee_id column, neither user has to wait for the other to enter the next available employee number. The sequence automatically generates the correct values for each user.
  Therefore, the sequence generator reduces serialization where the statements of two transactions must generate sequential numbers at the same time. By avoiding the serialization that results when multiple users wait for each other to generate and use a sequence number, the sequence generator improves transaction throughput, and a user's wait is considerably shorter.


oracle数据库怎么建sequences作为自增长序列

其实Oracle是没有SQL Server 的自增长的列的概念。我通过这种方式就是为了尽可能模拟。seq_a 是序列号insert into t_a (id, value) values(seq_a.nextval,'test'); 这就是Oracle的经典(后者通常)的使用方法。id当然就是你所谓的自增长列(再次强调,Oracle没有这个概念)只有通过触发器+sequence,能够实现你所谓自增长列。


oracle表中怎么建序列

oracle表中创建序列语法:CREATE SEQUENCE name[INCREMENT BY n][START WITH n] [{MAXVALUE n | NOMAXVALUE}][{MINVALUE n | NOMINVALUE}][{CYCLE | NOCYCLE}][{CACHE n | NOCACHE}]示例:increment by n:表明值每次增长n(步长)。start with n: 从n开始。{MAXVALUE n | NOMAXVALUE}: 设置最大值。{MINVALUE n | NOMINVALUE}: 设置最小值,start with不能小于最小值。CYCLE | NOCYCLE : 是否循环,建议不使用CACHE n | NOCACHE : 是否启用缓存。2、插入数据到表中示例:INSERT INTO emp VALUES(emp_sequence .nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。扩展资料:sql server数据库里建序列:alter table cust_info add sequence intinsert into cust_info (sequence)select row_number() over(order by cust_id) as cust_id_seq from cust_info

Oracle中如何创建序列

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 Oracle中如何创建序列 在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。 1、Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE 欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入Oracle中如何创建序列在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;一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVALCURRVAL=返回 sequence的当前值NEXTVAL=增加sequence的值,然后返回 sequence 值比如:emp_sequence.CURRVALemp_sequence.NEXTVAL可以使用sequence的地方:- 不包含子查询、snapshot、VIEW的 SELECT 语句 - INSERT语句的子查询中- NSERT语句的VALUES中- UPDATE 的 SET中可以看如下例子:INSERT INTO emp VALUES(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);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_sequenceINCREMENT BY 10MAXVALUE 10000 CYCLE -- 到10000后从头开始NOCACHE ;影响Sequence的初始化参数:SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。可以很简单的Drop Sequence DROP SEQUENCE order_seq;


在oracle数据库的建表中,Sequences值的目的是什么

Sequences目的,就是得到一个自动递减或递增的值。
Sequences就是一个计数器,类似于Sql Server数据库中自动增加的数字。
因为Oracle数据库中,建表的时候,没有自动增量的这样一个数字类型字段,
所以有时候需要用到这类字段的时候,就要调用Sequences来取得值。
Sequences可以设置为,当使用到设定的最大值时,是否重新开始循环使用。
调用时,直接写在Sql里即可,比如:
select sequence.NEXTVAL from dual;


oracle序列用nextval取值的问题

不知你注意了没有,每一个sequence.nextval的值是不一样的,而且同一sequence每次取值是不一样的。
当sequence的cache为0时,每次sequence.nextval得到的值是当前sequence的值加1。
但cache不为0时,比如为20,他就意味着每次在缓存中去20次再写入数据库去,这样的的用sequence.nextval得到的值就比较难确定,但能保证每次去的值不一样,是递增的。


上一篇:黑龙江旅游线路

下一篇:没有了

相关推荐

热门头条