oracle自增序列的删除,重建,回到最开始的设置值

前情提要:接上篇oracle自增序列说明,表TABLESPACETEST中使用序列更新CONTRACT_NO字段值。

原有表数据为:

 

1.删除数据(表数据太多了所以直接DROP了)

DROP TABLE TABLESPACETEST;

2.重新创建表TABLESPACETEST

-- Create table
create table TABLESPACETEST
(
  contract_no       VARCHAR2(100) not null,
  contract_start_dt DATE,
  contract_end_dt   DATE,
  loan_amt          NUMBER(20,6),
  loan_bal          NUMBER(20,6)
)
tablespace SYSTEM
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints 
alter table TABLESPACETEST
  add constraint PK_TEST_CON primary key (CONTRACT_NO)
  using index 
  tablespace SYSTEM
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

3.查看当前表的触发器,发现需要重新建下触发器

create  trigger TRIG_TABLESPACETEST_con      
before insert on TABLESPACETEST /*触发条件:当表TABLESPACETEST执行插入操作时触发此触发器*/ 
 for each row   /*对每一行都检测是否触发*/  
begin       
/*触发后执行的动作,在此是取得序列SEQ_SEQ_TABLESPACETEST_con的下一个值插入到表BC_ES_IK_HOT_WORD中的id字段中*/ 
select SEQ_TABLESPACETEST_con.nextval into :new.CONTRACT_NO from dual;  
end; 

 4.新增表数据

 

发现CONTRACT_NO序列是从历史数据开始,没有从1开始。

5.新增数据达到序列的最大值报错

 

6.所以DROP表如果表存在序列最好重建或者使用语句回到最开始的值

原有序列现状:

 

 

6.1重建语句:

DROP SEQUENCE sequence_name;
create sequence SEQ_TABLESPACETEST_con 
 minvalue 1 
 maxvalue 999999   
 increment by 1    
 start with 1;

6.2使用语句回到最开始的

(如果不先改完新增一条数据就设置增长值改为原来的,LAST_NUMBER又会变回去。所以要先新增一条)

---数值设置为MAX_VALUE-1使得LAST_NUMBER回到1
alter sequence SEQ_TABLESPACETEST_con increment by -117128712;
----查询当前改动是否成功
select * from USER_SEQUENCES where SEQUENCE_NAME='SEQ_TABLESPACETEST_CON';

6.2.1新增一条数据

 

6.2.2新增一条数据成功了则还要将增长值设置回原来的

alter sequence SEQ_TABLESPACETEST_con increment by 1;

现有序列值变为:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值