我们正在创建现有数据库的“空白”/最小副本,并希望将其中一个序列重置为一个值。将数字放在下面是可行的,但我想在导出中的序列具有更高的数字时使其可重用,试图避免删除和重新创建。
您可以执行相当于子选择和计算的操作来获取值,还是需要将其设置为第一个变量?
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。
您可以使用负增量将序列重置为较低的值 - 此脚本(它只是您的 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)