`

Oracle中,何种情况下Sequence被限制使用

阅读更多
  Oracle中,何种情况下Sequence被限制使用

1、在使用Oracle序列的currval和nextval时的限制

创建一个序列
create sequence test_seq
minvalue 1
maxvalue 10000000
start with 1
increment by 1
cache 20;

2、在delete,select,update语句的子查询中不能使用sequence的值

SQL>  delete from test_jy where test_id <(select test_seq.currval from dual);
delete from test_jy where test_id <(select test_seq.currval from dual)
ORA-02287: 此处不允许序号
SQL>  select * from test_jy where test_id <(select test_seq.currval from dual);
select * from test_jy where test_id <(select test_seq.currval from dual)
ORA-02287: 此处不允许序号
SQL>  update test_jy set test_id=0 where test_id <(select test_seq.currval from dual);
update test_jy set test_id=0 where test_id <(select test_seq.currval from dual)
ORA-02287: 此处不允许序号

3、在查询视图或物化视图时

SQL> select a.* from test_v a where a.userid<test_seq.currval  ;
select a.* from test_v a where a.userid<test_seq.currval
ORA-02287: 此处不允许序号

4、带有distinct操作符的select语句不能使用

SQL> select distinct a.*,test_seq.currval from test_v a ;
select distinct a.*,test_seq.currval from test_v a
ORA-02287: 此处不允许序号

5、有group by,order by操作的select语句不能使用

SQL>  select  test_jy.*,test_seq.currval from test_jy group by test_jy.test_id;
select  test_jy.*,test_seq.currval from test_jy group by test_jy.test_id
ORA-02287: 此处不允许序号
SQL>  select  test_jy.*,test_seq.currval from test_jy order by test_jy.test_id;
select  test_jy.*,test_seq.currval from test_jy order by test_jy.test_id
ORA-02287: 此处不允许序号

6、有UNION, INTERSECT, MINUS操作符的语句不能使用

SQL> select  test_jy.*,test_seq.currval from test_jy where test_id=1
union
select  test_jy.*,test_seq.currval from test_jy where test_id=2;
select  test_jy.*,test_seq.currval from test_jy where test_id=1
union
select  test_jy.*,test_seq.currval from test_jy where test_id=2
ORA-02287: 此处不允许序号
SQL> select  test_jy.*,test_seq.currval from test_jy where test_id=1
intersect
select  test_jy.*,test_seq.currval from test_jy where test_id=2;
select  test_jy.*,test_seq.currval from test_jy where test_id=1
intersect
select  test_jy.*,test_seq.currval from test_jy where test_id=2
ORA-02287: 此处不允许序号
SQL> select  test_jy.*,test_seq.currval from test_jy where test_id=1
minus
select  test_jy.*,test_seq.currval from test_jy where test_id=2;
select  test_jy.*,test_seq.currval from test_jy where test_id=1
minus
select  test_jy.*,test_seq.currval from test_jy where test_id=2
ORA-02287: 此处不允许序号

7、在select语句中的where子句中

SQL> select  test_jy.* from test_jy where test_id<test_seq.currval;
select  test_jy.* from test_jy where test_id<test_seq.currval
ORA-02287: 此处不允许序号

8、在create table或alter table语句的中default值是不能使用sequence

SQL> alter table test_jy modify test_id number(20) default test_seq.currval;
alter table test_jy modify test_id number(20) default test_seq.currval
ORA-00984: 列在此处不允许

9、还有就在check约束中不能使用

本文来源:[url]http://www.55linux.com/oracle/DBA/536.html | 55linux[/url]
分享到:
评论

相关推荐

    Oracle sequence 重置(失效恢复)

    这种情况通常发生在数据迁移后,原有的Sequence不再与表中的最大值相匹配,导致新记录插入时出现ID冲突或者跳号的情况。为了解决这个问题,我们需要对失效的Sequence进行重置,使其能够继续正常工作。 #### 一、...

    oracle中的sequence实现主键增长

    Oracle中的Sequence是数据库管理系统提供的一种机制,用于生成序列化的整数,通常用于主键或唯一标识符,确保数据的唯一性和有序性。在Oracle中,Sequence不同于其他数据库系统的自增字段,例如SQL Server中的`...

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

    一旦定义了 SEQUENCE,可以使用 CURRVAL 和 NEXTVAL 来获取当前值和下一个值。CURRVAL 返回当前 SEQUENCE 的值,NEXTVAL 增加 SEQUENCE 的值,然后返回增加后的值。 例如,使用 S_S_DEPART SEQUENCE.insert 一个新...

    oracle中sequence介绍及应用

    在Oracle数据库中,Sequence是一种用于自动产生数值序列的对象。它可以生成连续的整数或者非连续的整数序列,并且可以根据需求进行递增或递减。Sequence常用于为表中的某列自动生成唯一的主键值或者作为流水号使用。...

    oracle 存储过程使用 sequence

    在Oracle中,Sequence则是一种自增序列号生成器,通常用于主键或者唯一标识的生成。在本话题中,我们将深入探讨如何在存储过程中使用Sequence。 首先,理解Sequence的基本概念。Sequence在Oracle中是一个预定义的...

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

    在Oracle中,sequence是一种自动递增或递减的数字序列,常用于生成唯一的主键值,避免手动为每条新记录分配ID。创建一个sequence后,你可以通过nextval或currval函数获取序列的下一个或当前值。 Trigger则是数据库...

    ORACLE SEQUENCE的简单介绍

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

    oracle 主键自增 sequence

    在 Oracle 数据库中,`Sequence` 是一种用于生成一系列唯一数值的对象。这些数值可以按照特定的规则递增或递减,并且可以设定是否循环以及是否缓存等特性。`Sequence` 常用于自动生成主键值,特别是在没有使用 `AUTO...

    分享ORACLE SEQUENCE跳号总结

    在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢?  事务回滚引起的跳号  不管序列有...

    oracle_sequence.rar_oracle

    在Oracle中,序列(Sequence)是一个非常重要的概念,它主要用于生成唯一的整数序列,常常被用来作为主键值,特别是在插入新记录时自动增加。在本篇文章中,我们将深入探讨Oracle序列的创建、使用以及其在实际应用中...

    Oracle、DB2、PostgreSQL之Sequence总结

    Sequence是数据库管理中的一种机制,用于生成有序的序列号,常被用作主键或唯一标识符。在Oracle、DB2和PostgreSQL这三种数据库管理系统中,Sequence都是内置的特性,允许用户创建并管理这样的自动递增序列。然而,...

    生成oracle数据库中的所有sequence的语句

    可以根据oracle数据库中存在的sequence,生成建立语句

    让CoolSQL支持Oracle Sequence的GeneratedKey,懂的入

    5. **存储过程**:在某些情况下,你可以创建一个Oracle的存储过程来处理Sequence生成和插入操作,然后在CoolSQL中调用这个存储过程。这种方法将业务逻辑移出客户端,使代码更加整洁。 总的来说,使CoolSQL支持...

    oracle GoldenGate 同步oracle sequence的步骤

    ### Oracle GoldenGate 同步 Oracle Sequence 的步骤 Oracle GoldenGate 是一款强大的数据复制软件,能够实现跨平台的数据复制。在企业级应用环境中,为了确保数据的一致性和完整性,经常需要将源数据库中的序列...

    Hibernate Oracle sequence的使用技巧

    本文将详细介绍如何在Hibernate中使用Oracle sequence,以及在使用过程中应注意的一些事项。 首先,我们来看如何为不同的表创建各自的sequence。在Oracle数据库中,你可以通过SQL语句创建一个sequence,例如: ```...

    浅谈MyBatis-Plus学习之Oracle的主键Sequence设置的方法

    在Oracle数据库中,由于不支持自动递增的主键策略,开发者通常会使用Sequence来生成主键值。本文将深入探讨如何在MyBatis-Plus(MP)框架中配置Oracle的主键Sequence。 首先,Oracle Sequence是Oracle数据库提供的...

    sequence等同于序列号

    在Oracle数据库中,`sequence`机制是一种自动生成唯一数值序列的方法,常用于为主键字段提供连续的整数值。它类似于其他数据库系统中的自动增长字段,但在Oracle中更加灵活可控。本文将详细介绍`sequence`的基本概念...

    Oracle数据库中序列的使用

    ### Oracle数据库中序列的使用 在Oracle数据库管理中,序列是一种非常实用的对象,它能够自动生成唯一的数值。这种特性使得序列在很多应用场景中都极为重要,比如为表中的记录自动分配唯一标识符(如主键)。本文将...

Global site tag (gtag.js) - Google Analytics