发布于 2008-09-18 15:34:52
下面是一个很好的过程,可以将Oracle guru Tom Kyte中的任何序列重置为0。在下面的链接中也有很多关于利弊的讨论。
tkyte@TKYTE901.US.ORACLE.COM>
create or replace
procedure reset_seq( p_seq_name in varchar2 )
is
l_val number;
begin
execute immediate
'select ' || p_seq_name || '.nextval from dual' INTO l_val;
execute immediate
'alter sequence ' || p_seq_name || ' increment by -' || l_val ||
' minvalue 0';
execute immediate
'select ' || p_seq_name || '.nextval from dual' INTO l_val;
execute immediate
'alter sequence ' || p_seq_name || ' increment by 1 minvalue 0';
end;
/
在此页面中:Dynamic SQL to reset sequence value
另一个很好的讨论也在这里:How to reset sequences?
发布于 2008-09-09 09:46:29
真正的重启是不可能的AFAIK。(如果我错了,请纠正我!)
但是,如果要将其设置为0,则只需删除并重新创建即可。
如果要将其设置为特定值,可以将增量设置为负值并获得下一个值。
也就是说,如果您的序列是500,则可以通过将其设置为100
ALTER SEQUENCE serial INCREMENT BY -400;
SELECT serial.NEXTVAL FROM dual;
ALTER SEQUENCE serial INCREMENT BY 1;
发布于 2010-11-05 02:53:28
以下脚本将序列设置为所需的值:
给定一个新创建的名为PCS_PROJ_KEY_SEQ的序列和表PCS_PROJ:
BEGIN
DECLARE
PROJ_KEY_MAX NUMBER := 0;
PROJ_KEY_CURRVAL NUMBER := 0;
BEGIN
SELECT MAX (PROJ_KEY) INTO PROJ_KEY_MAX FROM PCS_PROJ;
EXECUTE IMMEDIATE 'ALTER SEQUENCE PCS_PROJ_KEY_SEQ INCREMENT BY ' || PROJ_KEY_MAX;
SELECT PCS_PROJ_KEY_SEQ.NEXTVAL INTO PROJ_KEY_CURRVAL FROM DUAL;
EXECUTE IMMEDIATE 'ALTER SEQUENCE PCS_PROJ_KEY_SEQ INCREMENT BY 1';
END;
END;
/
https://stackoverflow.com/questions/51470
复制相似问题