如果表为空,如何重置序列?

时间:2017-06-12 19:58:21

标签: sql oracle sequence increment mybatis

我正在使用Oracle SQL。有一个用于id的序列和触发器,每次在表中添加新记录时,它都会从1开始递增。但是,如果删除所有记录并将新记录添加到该表中,则id不会从1开始,而它从序列中记录的最后一个最大记录数开始。

因此在TRIGGER语句中有一种方法,如果表为空并且导入了新记录,我可以重置序列。

或者我是否必须使用stored_procedure方式,如果那样我怎样才能使用myBatis mapper调用它?

表(customer_info)

customer_id customer_name customer_location
1           Arbin         USA
2           Tim           Canada
3           Rachel        Australia

序列

CREATE sequence customer_id_seq START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; 

触发

CREATE OR REPLACE TRIGGER customer_id 
BEFORE INSERT ON customer_info 
FOR EACH ROW

BEGIN
 SELECT customer_id_seq.NEXTVAL
 INTO   :new.customer_id
 FROM   dual;
END;
/

谢谢。

1 个答案:

答案 0 :(得分:2)

一旦截断表格。序列必须重置为1。

通过再次删除并重新创建它来实现它的最简单方法。

 DROP SEQUENCE customer_id_seq
 CREATE sequence customer_id_seq START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;