我正在尝试创建一个脚本来将数据从一个数据库迁移到另一个数据库。我目前无法做的一件事是将序列的下一个值设置为另一个数据库中序列的下一个值。
我从 user_sequences 中得到了值的差异,并生成了以下动态 SQL 语句:
execute immediate 'alter sequence myseq increment by 100';
execute immediate 'select myseq.nextval from dual';
execute immediate 'alter sequence myseq increment by 1';
commit;
但什么也没有发生。我错过了什么?如果我在过程之外运行相同的语句,它们可以正常工作:
alter sequence myseq increment by 100;
select myseq.nextval from dual;
alter sequence myseq increment by 1;
commit;
编辑:向所有不清楚的人道歉。我实际上正在改变同一个数据库中的序列。我只是从远程数据库中获取要设置的值。也许没有必要提及远程数据库,因为它不会影响事物。我只是提到它来解释我的目标是什么。
步骤 1. 我从远程数据库获取序列的 nextval。
select (select last_number
from dba_sequences@remoteDB
where upper(sequence_name) = upper(v_sequence_name)) - (select last_number
from user_sequences
where upper(sequence_name) = upper(v_sequence_name)) increment_by
from dual;
第 2 步。我使用此值生成动态 SQL 语句:
execute immediate 'alter sequence myseq increment by 100';
execute immediate 'select myseq.nextval from dual';
execute immediate 'alter sequence myseq increment by 1';
commit;
没有引发错误,但什么也没发生。当我用 DBMS_OUTPUT.PUT_LINE 编写 SQL 语句并在外面运行它们时,它们就起作用了。