如果seq.nextval低于最大id值,则重置seq增量

时间:2014-05-06 03:36:38

标签: sql oracle-sqldeveloper

编写将记录插入表中的存储过程。我在设置seq.nextval值时遇到问题。在插入的表中,似乎有时表中的最大id值高于nextval所指示的值。

SELECT TABLE_SEQ.NEXTVAL AS CASE_ID
FROM DUAL;
  

CASE_ID
  1015

SELECT MAX(CASE_ID) AS CASE_ID
FROM CASE_TABLE;
  

CASE_ID
  2015

我需要检查表的nextval是什么,然后比较ID字段的最大值,如果nextval value is lower than the Max id value, I need to increment the nextval`值,则直到它高于最大id值1。

Oracle的SQL Developer工具的新手,我一直在研究如何做到这一点,但找不到方法。有没有人有任何想法分享?

非常感谢!!!!

2 个答案:

答案 0 :(得分:0)

我不太清楚你如何面对所描述的结果。但我会建议你玩这个序列。要重置它,例如:

alter sequence seq_nameincrement by 124;
select seq_name.nextval from dual;
alter sequence seq_name increment by 1;

此外,我建议您查看thisthat one arcticles。

答案 1 :(得分:0)

这里有效:

select max(pk) y from sometable;

select seq.currval x from dual;
# or
select seq.nextval x from dual;

DECLARE 
   l_val NUMBER; 
BEGIN 
   FOR i IN 1..<y-x>
   LOOP 
      l_val := sometable.NEXTVAL; 
   END LOOP; 
END;

ORA-32793: cannot alter a system-generated sequence 可以通过以下方式引发。

alter sequence FORMS_SQ increment by 1 minvalue 0