あるDBから別のDBにデータを移行するためのスクリプトを作成しようとしています。現在私ができないことの1つは、シーケンスのnextvalを別のDBのシーケンスのnextvalに設定することです。
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;
編集:明確ではないことをすべての人に謝罪します。私は実際に同じDBのシーケンスを変更しています。リモートDBから設定する値のみを取得しています。おそらく、リモートDBは物事に影響を与えないため、言及する必要はありませんでした。私は自分の目標が何であるかを説明するためにそれについて言及しただけです。
ステップ1.リモートDBからシーケンスの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ステートメントを記述し、それらを外部で実行すると、機能しました。