第3章 伪列:序列伪列

原文地址:http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns002.htm

序列是能够产生连续唯一值的模式对象。这些值通常用于主键和唯一键。可以在SQL语句中使用以下伪列引用序列的值:

  • CURRVAL:返回序列的当前值。

  • NEXTVAL:递增序列并返回下一个值。

必须使用序列名称修饰CURRVAL和NEXTVAL:

sequence.CURRVAL

sequence.NEXTVAL

要引用另一个用户模式下的序列的当前值或者下一个值,必须被授予该序列上SELECT对象权限或者SELECT ANY SEQUENCE系统权限,并且必须指定包含序列的模式:

schema.sequence.CURRVAL

schema.sequence.NEXTVAL

要引用远程数据库中的序列值,必须指定数据库链接的名称:

schema.sequence.CURRVAL@dblink

schema.sequence.NEXTVAL@dblink

序列值的应用场景

序列的CURRVAL和NEXTVAL可以用于以下位置:

  • 非子查询、物化视图或者视图中的SELECT语句的选择列表中。

  • INSERT语句中的子查询的选择列表中。

  • INSERT语句的VALUES子句中。

  • UPDATE语句的SET子句中。

序列值的限制

不能在以下结构中使用CURRVAL和NEXTVAL值:

  • DELETE、SELECT或者UPDATE语句的子查询中。

  • 视图或者物化视图的查询中。

  • 带DISTINCT操作符的SELECT语句中。

  • 带GROUP BY子句或者ORDER BY子句的SELECT语句中。

  • 与另一个SELECT语句通过UNION、INTERSECT或者MINUS集合操作符进行联合的SELECT语句中。

  • SELECT语句的WHERE子句中。

  • CREATE TABLE或者ALTER TABLE语句中列的DEFAULT值。

  • CHECK约束的条件中。

在使用CURRVAL或者NEXTVAL的单条SQL语句中,所有引用的LONG列、被更新表以及被锁定表必须位于同一个数据库中。

序列值的使用方法

定义序列时,可以指定它的初始值和增量。第一次引用NEXTVAL将会返回初始值。随后的NEXTVAL引用将会递增序列的值并返回新值。CURRVAL总是返回序列的当前值,即最后一次引用NEXTVAL返回的值。

在会话中首次使用CURRVAL之前,必须先使用NEXTVAL进行初始化。

在单条SQL语句中引用NEXTVAL时,Oracle按照以下方式递增序列:

  • SELECT语句的外部查询块返回的每一行递增一次。这类查询块可以出现在以下地方:顶层SELECT语句;INSERT ... SELECT语句。对于多表插入,NEXTVAL必须位于VALUES子句中,序列对于子查询返回的每一行递增一次,即使多个分支引用了NEXTVAL;CREATE TABLE ... AS SELECT语句;CREATE MATERIALIZED VIEW ... AS SELECT语句。
  • UPDATE语句更新的每一行递增一次。
  • 每一条包含VALUES子句的INSERT语句递增一次。
  • MERGE语句合并的每一行递增一次。NEXTVAL可以出现在merge_insert_clause或者merge_update_clause子句中,也可以同时出现。NEXTVAL对于更新和插入的每一行递增一次,即使序列数值没有用于更新或者插入操作。如果NEXTVAL在这些位置中指定了多次,每一行递增一次,用于该行的所有NEXTVAL都返回相同的值。

如果这些位置包含多个NEXTVAL引用,对于所有的NEXTVAL序列递增一次并返回相同的值。

如果这些位置同时引用CURRVAL和NEXTVAL,Oracle递增序列并为CURRVAL和NEXTVAL返回相同的值。

序列可以同时被许多用户访问,不存在等待和锁定。

示例:查找序列的下一个值

以下示例查询了模式hr中雇员序列的下一个值:

 
 

示例:将序列值插入表中

以下示例递增雇员序列并将其值用于向表hr.employees中插入一个新雇员信息:

 
 

示例:复用序列的当前值

以下示例使用下一个订单序列号向主订单表中插入一条订单,然后使用该订单号向订单细节表中添加多个子条目:

 
   


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24945919/viewspace-747847/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24945919/viewspace-747847/

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值