将序列重置为特定值

Posted

技术标签:

【中文标题】将序列重置为特定值【英文标题】:Reset sequence to a specific value 【发布时间】:2014-04-17 09:44:08 【问题描述】:

我们正在创建现有数据库的“空白”/最小副本,并希望将其中一个序列重置为一个值。将数字放在下面的作品中,但我希望在导出中的序列具有更高的数字时使其可重用,以避免丢弃和重新创建。

你能做相当于子选择和计算的方法来获取值还是需要将其设置为变量 1st?

alter sequence users.SQ_USER_ID INCREMENT BY  (99999 - select users.SQ_USER_ID.nextval from dual) nocache;
select users.SQ_USER_ID.nextval from dual;
alter sequence users.SQ_USER_ID INCREMENT BY 1  cache 20;

目标是以 nextval 为 99999 的序列结束。

【问题讨论】:

Need to reset the value of sequence in Oracle的可能重复 【参考方案1】:

您可以使用负增量将序列重置为较低的值 - 此脚本(它只是您的 PL/SQL 块版本)将使用大于 9999 的序列值而不会出现问题):

declare
 currval pls_integer;
 diff pls_integer;
begin
  select SQ_USER_ID.nextval into currval from dual;
  dbms_output.put_line('value before alter: ' || currval);
  diff := 99999 - currval;
  dbms_output.put_line('diff: ' || diff);
  execute immediate ' alter sequence SQ_USER_ID INCREMENT BY ' ||  diff || 'nocache';
  select SQ_USER_ID.nextval into currval from dual;
  dbms_output.put_line('value after alter: ' || currval);
  execute immediate 'alter sequence SQ_USER_ID INCREMENT BY 1  cache 20';
end;

【讨论】:

以上是关于将序列重置为特定值的主要内容,如果未能解决你的问题,请参考以下文章

在特定时间释放一个键会重置序列吗?

将文件重置为特定提交的命令是啥? [复制]

在 SQL 中将列的子集重置为其默认值?

转Oracle重置序列(不删除重建方式)

Firebase函数在一天中的特定时间重置值[重复]

我如何制作一个可重置的RxSwift计时器?