Solución:
Si puede usar PL / SQL, intente (EDITAR: Incorpora la sugerencia xlnt de Neil para comenzar en el siguiente valor más alto):
SELECT 'CREATE SEQUENCE transaction_sequence MINVALUE 0 START WITH '||MAX(trans_seq_no)+1||' INCREMENT BY 1 CACHE 20'
INTO v_sql
FROM transaction_log;
EXECUTE IMMEDIATE v_sql;
Otro punto a considerar: si configura el parámetro CACHE en 20, corre el riesgo de perder hasta 19 valores en su secuencia si la base de datos deja de funcionar. Los valores de CACHEd se pierden al reiniciar la base de datos. A menos que esté presionando la secuencia con mucha frecuencia, o no le importen mucho los espacios, lo establecería en 1.
Un detalle final: los valores que especificó para CACHE e INCREMENT BY son los predeterminados. Puede dejarlos apagados y obtener el mismo resultado.
Aquí tengo mi ejemplo que funciona bien:
declare
ex number;
begin
select MAX(MAX_FK_ID) + 1 into ex from TABLE;
If ex > 0 then
begin
execute immediate 'DROP SEQUENCE SQ_NAME';
exception when others then
null;
end;
execute immediate 'CREATE SEQUENCE SQ_NAME INCREMENT BY 1 START WITH ' || ex || ' NOCYCLE CACHE 20 NOORDER';
end if;
end;
es posible que desee comenzar con max(trans_seq_no) + 1.
mirar:
SQL> create table my_numbers(my_number number not null primary key);
Table created.
SQL> insert into my_numbers(select rownum from user_objects);
260 rows created.
SQL> select max(my_number) from my_numbers;
MAX(MY_NUMBER)
--------------
260
SQL> create sequence my_number_sn start with 260;
Sequence created.
SQL> insert into my_numbers(my_number) values (my_number_sn.NEXTVAL);
insert into my_numbers(my_number) values (my_number_sn.NEXTVAL)
*
ERROR at line 1:
ORA-00001: unique constraint (NEIL.SYS_C00102439) violated
Cuando crea una secuencia con un número, debe recordar que la primera vez que seleccione contra la secuencia, Oracle devolverá el valor inicial que le asignó.
SQL> drop sequence my_number_sn;
Sequence dropped.
SQL> create sequence my_number_sn start with 261;
Sequence created.
SQL> insert into my_numbers(my_number) values (my_number_sn.NEXTVAL);
1 row created.
Si está tratando de hacer lo ‘sin pausas’, le recomiendo encarecidamente que