【问题标题】:What is the best way of resetting a sequence in Oracle 10g?在 Oracle 10g 中重置序列的最佳方法是什么?
【发布时间】:2013-02-06 03:49:50
【问题描述】:

要重置 Oracle 序列,我遵循以下临时方法。比方说,我有一个名为 TEMP_TABLE 的表,并有一个与之关联的序列。

以下 SQL 生成 22 作为序列下一个值(仅在这种情况下)。

SELECT TEMP_TABLE_SEQ.NEXTVAL from DUAL;

以下语句将缓存大小减小到SEQUENCE.MINVALUE

ALTER SEQUENCE TEMP_TABLE_SEQ INCREMENT BY -21;

接下来,我正在执行一个虚拟选择,检索 1 作为序列值。

SELECT TEMP_TABLE_SEQ.NEXTVAL from DUAL;

我现在将缓存大小重置为 1

ALTER SEQUENCE TEMP_TABLE_SEQ INCREMENT BY 1;

所以下面的语句,

SELECT TEMP_TABLE_SEQ.NEXTVAL from DUAL;

给我 2 作为下一个序列值,依此类推。


在 PostgreSQL 服务器中,以下仅一条语句就足以重置序列。

ALTER SEQUENCE TEMP_TABLE_SEQ RESTART WITH 0;

Oracle (10g) 中是否有这种公平的方式来重置序列?

【问题讨论】:

标签: oracle oracle10g


【解决方案1】:

这个怎么样:

  1. 删除序列

     DROP TEMP_TABLE_SEQ;
    
  2. 重新创建序列

     CREATE SEQUENCE TEMP_TABLE_SEQ
     MINVALUE 1
     MAXVALUE  999999999999999999999
     START WITH 1
     INCREMENT BY 1
     CACHE 20;
    

【讨论】:

  • 这也会破坏序列上的任何授权。
  • 但是删除序列会使与该序列关联的所有对象无效,并且它们都需要重新编译。任何特权也将被撤销,需要再次授予与新创建的序列关联的任务。
猜你喜欢
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 2010-11-20
  • 2012-10-30
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
相关资源
最近更新 更多