TESTDB> create sequence temp_seq; Sequence created. TESTDB> select temp_seq.nextval from dual; NEXTVAL ---------- 1 TESTDB> select temp_seq.nextval from dual; NEXTVAL ---------- 2 TESTDB> select SEQUENCE_NAME, cache_size, last_number from user_sequences; SEQUENCE_NAME CACHE_SIZE LAST_NUMBER ------------------------------ ---------- ----------- TEMP_SEQ 20 21
I finally decdied to adopt a PL/SQL solution. I first created a helper table (seq_bump), which stores the target values. Then, I created the following PL/SQL procedure:
declare cursor c is select seq_owner, seq_name, bump_number from seq_bump; stmt varchar2(300); l_seq_owner seq_bump.seq_owner%type; l_seq_name seq_bump.seq_name%type; l_bump_number seq_bump.bump_number%type; l_nextval number; l_inc number; l_count number :=0; begin open c; loop -- l_count := l_count + 1; -- dbms_output.put_line('**** conunter = ' || l_count ); fetch c into l_seq_owner, l_seq_name, l_bump_number; stmt:= 'select ' || l_seq_owner || '.' || l_seq_name || '.nextval from dual'; execute immediate stmt into l_nextval; -- dbms_output.put_line('next values is ' || l_nextval); l_inc := l_bump_number - l_nextval; stmt:= 'alter sequence ' || l_seq_owner || '.' || l_seq_name || ' increment by ' || l_inc ; -- dbms_output.put_line(stmt); execute immediate stmt; stmt:= 'select ' || l_seq_owner || '.' || l_seq_name || '.nextval from dual'; -- dbms_output.put_line(stmt); execute immediate stmt into l_nextval; stmt:= 'alter sequence ' || l_seq_owner || '.' || l_seq_name || ' increment by 1 '; execute immediate stmt; exit when c%notfound; end loop; close c; end; /
I tested above procedure and this will be implemented in production this weekend, hopefully it will work as I expect.
2 comments:
Nicer solution than the one that I have used. Dropping and creating sequences setting start with value.
Are all your sequences originally incrementing by one? At least after the execution they are "increment by 1".
@Rafu - Thanks for stopping by. I did not do drop and re-create was to try to avoid grant privs and create synonyms. Yes, all my sequneces are incremented by 1.
Post a Comment