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